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:
parent
806d9ce811
commit
f6e173437e
3 changed files with 42 additions and 1 deletions
10
src/ajax.js
10
src/ajax.js
|
@ -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" );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 );
|
||||
|
|
Loading…
Reference in a new issue