Ajax: Don't process non-string data property on no-entity-body requests

Fixes gh-3438
Closes gh-3781
This commit is contained in:
Dave Methvin 2017-09-12 11:24:45 -04:00
parent 022b69a44e
commit d7237896c7
2 changed files with 34 additions and 3 deletions

View File

@ -597,8 +597,8 @@ jQuery.extend( {
// Remember the hash so we can put it back // Remember the hash so we can put it back
uncached = s.url.slice( cacheURL.length ); uncached = s.url.slice( cacheURL.length );
// If data is available, append data to url // If data is available and should be processed, append data to url
if ( s.data ) { if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
// #9682: remove data so that it's not used in an eventual retry // #9682: remove data so that it's not used in an eventual retry

View File

@ -1274,7 +1274,7 @@ QUnit.module( "ajax", {
}; };
} ); } );
ajaxTest( "jQuery.ajax() - data - no processing ", 1, function( assert ) { ajaxTest( "jQuery.ajax() - data - no processing POST", 1, function( assert ) {
return { return {
url: "bogus.html", url: "bogus.html",
data: { devo: "A Beautiful World" }, data: { devo: "A Beautiful World" },
@ -1289,6 +1289,37 @@ QUnit.module( "ajax", {
}; };
} ); } );
ajaxTest( "jQuery.ajax() - data - no processing GET", 1, function( assert ) {
return {
url: "bogus.html",
data: { devo: "A Beautiful World" },
type: "get",
contentType: "x-something-else",
processData: false,
beforeSend: function( _, s ) {
assert.deepEqual( s.data, { devo: "A Beautiful World" }, "data is not processed" );
return false;
},
error: true
};
} );
ajaxTest( "jQuery.ajax() - data - process string with GET", 2, function( assert ) {
return {
url: "bogus.html",
data: "a=1&b=2",
type: "get",
contentType: "x-something-else",
processData: false,
beforeSend: function( _, s ) {
assert.equal( s.url, "bogus.html?a=1&b=2", "added data to url" );
assert.equal( s.data, undefined, "removed data from settings" );
return false;
},
error: true
};
} );
var ifModifiedNow = new Date(); var ifModifiedNow = new Date();
jQuery.each( jQuery.each(