Fixes #8219. Introduces the mimeType option to override content-type header in conversion (and in native xhr when possible). Adds companion overrideMimeType method on jqXHR object (it simply sets the option). Unit test added.

This commit is contained in:
jaubourg 2011-02-09 17:47:33 +01:00
parent 806d9ce811
commit f6e173437e
3 changed files with 42 additions and 1 deletions

View file

@ -426,6 +426,14 @@ jQuery.extend({
return match || null;
},
// Overrides response content-type header
overrideMimeType: function( type ) {
if ( state === 0 ) {
s.mimeType = type;
}
return this;
},
// Cancel the request
abort: function( statusText ) {
statusText = statusText || "abort";
@ -827,7 +835,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
while( dataTypes[ 0 ] === "*" ) {
dataTypes.shift();
if ( ct === undefined ) {
ct = jqXHR.getResponseHeader( "content-type" );
ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
}
}

View file

@ -87,6 +87,11 @@ if ( jQuery.support.ajax ) {
}
}
// Override mime type if needed
if ( s.mimeType && xhr.overrideMimeType ) {
xhr.overrideMimeType( s.mimeType );
}
// Requested-With header
// Not set for crossDomain requests with no content
// (see why at http://trac.dojotoolkit.org/ticket/9486)

View file

@ -2169,6 +2169,34 @@ test("jQuery.ajax - transitive conversions", function() {
});
test("jQuery.ajax - overrideMimeType", function() {
expect( 2 );
stop();
jQuery.when(
jQuery.ajax( url("data/json.php") , {
beforeSend: function( xhr ) {
xhr.overrideMimeType( "application/json" );
},
success: function( json ) {
ok( json.data , "Mimetype overriden using beforeSend" );
}
}),
jQuery.ajax( url("data/json.php") , {
mimeType: "application/json",
success: function( json ) {
ok( json.data , "Mimetype overriden using mimeType option" );
}
})
).then( start , start );
});
test("jQuery.ajax - abort in prefilter", function() {
expect( 1 );