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
10
src/ajax.js
10
src/ajax.js
|
@ -426,6 +426,14 @@ jQuery.extend({
|
||||||
return match || null;
|
return match || null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Overrides response content-type header
|
||||||
|
overrideMimeType: function( type ) {
|
||||||
|
if ( state === 0 ) {
|
||||||
|
s.mimeType = type;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
// Cancel the request
|
// Cancel the request
|
||||||
abort: function( statusText ) {
|
abort: function( statusText ) {
|
||||||
statusText = statusText || "abort";
|
statusText = statusText || "abort";
|
||||||
|
@ -827,7 +835,7 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
|
||||||
while( dataTypes[ 0 ] === "*" ) {
|
while( dataTypes[ 0 ] === "*" ) {
|
||||||
dataTypes.shift();
|
dataTypes.shift();
|
||||||
if ( ct === undefined ) {
|
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
|
// Requested-With header
|
||||||
// Not set for crossDomain requests with no content
|
// Not set for crossDomain requests with no content
|
||||||
// (see why at http://trac.dojotoolkit.org/ticket/9486)
|
// (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() {
|
test("jQuery.ajax - abort in prefilter", function() {
|
||||||
|
|
||||||
expect( 1 );
|
expect( 1 );
|
||||||
|
|
Loading…
Reference in a new issue