aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2023-03-20 17:08:51 +0100
committerGitHub <noreply@github.com>2023-03-20 17:08:51 +0100
commitce264e0789116e37fe371503537a217c038dfae8 (patch)
treea674fe89ba02bbaf63723d07a4976ee87fe5dcc3
parentcff2899885c314d32eea42e9eef6ead6e5da5c2f (diff)
downloadjquery-ce264e0789116e37fe371503537a217c038dfae8.tar.gz
jquery-ce264e0789116e37fe371503537a217c038dfae8.zip
Ajax: Allow `processData: true` even for binary data
The way gh-5197 implemented binary data handling, `processData` was being explicitly set to `false`. This is expected but it made it impossible to override it to `true`. The new logic will only set `processData` to `false` if it wasn't explicitly passed in original options. Closes gh-5205 Ref gh-5197
-rw-r--r--src/ajax/binary.js7
-rw-r--r--test/unit/ajax.js23
2 files changed, 28 insertions, 2 deletions
diff --git a/src/ajax/binary.js b/src/ajax/binary.js
index e96661da7..16f06d7e9 100644
--- a/src/ajax/binary.js
+++ b/src/ajax/binary.js
@@ -2,10 +2,13 @@ import jQuery from "../core.js";
import "../ajax.js";
-jQuery.ajaxPrefilter( function( s ) {
+jQuery.ajaxPrefilter( function( s, origOptions ) {
// Binary data needs to be passed to XHR as-is without stringification.
- if ( typeof s.data !== "string" && !jQuery.isPlainObject( s.data ) ) {
+ if ( typeof s.data !== "string" && !jQuery.isPlainObject( s.data ) &&
+
+ // Don't disable data processing if explicitly set by the user.
+ !( "processData" in origOptions ) ) {
s.processData = false;
}
diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index 7ecedc212..bcaa7651d 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -3148,4 +3148,27 @@ if ( typeof window.ArrayBuffer === "undefined" || typeof new XMLHttpRequest().re
};
} );
+ ajaxTest( "jQuery.ajax() - non-plain object", 1, function( assert ) {
+ return {
+ url: url( "mock.php?action=name" ),
+ method: "post",
+ data: Object.create( { name: "peter" } ),
+ success: function( data ) {
+ assert.strictEqual( data, "ERROR", "Data correctly not sent" );
+ }
+ };
+ } );
+
+ ajaxTest( "jQuery.ajax() - non-plain object with processData: true", 1, function( assert ) {
+ return {
+ url: url( "mock.php?action=name" ),
+ method: "post",
+ processData: true,
+ data: Object.create( { name: "peter" } ),
+ success: function( data ) {
+ assert.strictEqual( data, "pan", "Data sent correctly" );
+ }
+ };
+ } );
+
} )();