// Set headers
for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
+ // Support: IE<9
+ // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
+ // request header to a null-value.
+ //
+ // To keep consistent with other XHR implementations, cast the value
+ // to string and ignore `undefined`.
+ if ( headers[ i ] !== undefined ) {
+ xhr.setRequestHeader( i, headers[ i ] + "" );
+ }
}
// Do send the request
});
});
- ajaxTest( "jQuery.ajax() - headers", 4, {
+ ajaxTest( "jQuery.ajax() - headers", 5, {
setup: function() {
jQuery( document ).ajaxSend(function( evt, xhr ) {
xhr.setRequestHeader( "ajax-send", "test" );
});
},
- url: url("data/headers.php?keys=siMPle_SometHing-elsE_OthEr_ajax-send"),
+ url: url("data/headers.php?keys=siMPle_SometHing-elsE_OthEr_Nullable_undefined_Empty_ajax-send"),
headers: {
"siMPle": "value",
"SometHing-elsE": "other value",
- "OthEr": "something else"
+ "OthEr": "something else",
+ "Nullable": null,
+ "undefined": undefined,
+
+ // Support: Firefox
+ // Not all browsers allow empty-string headers
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=815299
+ //"Empty": ""
},
success: function( data, _, xhr ) {
var i, emptyHeader,
}),
tmp = [];
for ( i in requestHeaders ) {
- tmp.push( i, ": ", requestHeaders[ i ], "\n" );
+ tmp.push( i, ": ", requestHeaders[ i ] + "", "\n" );
}
tmp = tmp.join("");
strictEqual( data, tmp, "Headers were sent" );
strictEqual( xhr.getResponseHeader("Sample-Header"), "Hello World", "Sample header received" );
+ ok( data.indexOf( "undefined" ) < 0 , "Undefined header value was not sent" );
emptyHeader = xhr.getResponseHeader("Empty-Header");
if ( emptyHeader === null ) {
url: url("data/headers.php?keys=content-type"),
contentType: false,
success: function( data ) {
- strictEqual( data, "content-type: \n", "Test content-type is not sent when options.contentType===false" );
+ strictEqual( data, "", "Test content-type is not sent when options.contentType===false" );
}
}
]);