aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2017-09-12 11:24:45 -0400
committerDave Methvin <dave.methvin@gmail.com>2018-01-15 21:48:54 -0500
commitd7237896c79a5a10d85fcdec199c5657a469a92b (patch)
treec6e5900dbf4b91e0aad67af655ba4e52c3034e98
parent022b69a44e42684bdd0029dd456bedb3b495cc24 (diff)
downloadjquery-d7237896c79a5a10d85fcdec199c5657a469a92b.tar.gz
jquery-d7237896c79a5a10d85fcdec199c5657a469a92b.zip
Ajax: Don't process non-string data property on no-entity-body requests
Fixes gh-3438 Closes gh-3781
-rw-r--r--src/ajax.js4
-rw-r--r--test/unit/ajax.js33
2 files changed, 34 insertions, 3 deletions
diff --git a/src/ajax.js b/src/ajax.js
index dd1321240..aec26830a 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -597,8 +597,8 @@ jQuery.extend( {
// Remember the hash so we can put it back
uncached = s.url.slice( cacheURL.length );
- // If data is available, append data to url
- if ( s.data ) {
+ // If data is available and should be processed, append data to url
+ if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
// #9682: remove data so that it's not used in an eventual retry
diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index 26aa3ad21..ab5ce24a8 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -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 {
url: "bogus.html",
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();
jQuery.each(