mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Ajax: Overwrite s.contentType with content-type header value, if any
This fixes the issue of "%20" in POST data being replaced with "+"
even for requests with content-type different from
"application/x-www-form-urlencoded", e.g. for "application/json".
Fixes gh-4119
Closes gh-4650
(cherry picked from 7fb90a6bea
)
Co-authored-by: Richard Gibson <richard.gibson@gmail.com>
Co-authored-by: Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
This commit is contained in:
parent
1a4f10ddc3
commit
065143c2e9
@ -855,5 +855,14 @@ jQuery.each( [ "get", "post" ], function( _i, method ) {
|
||||
};
|
||||
} );
|
||||
|
||||
jQuery.ajaxPrefilter( function( s ) {
|
||||
var i;
|
||||
for ( i in s.headers ) {
|
||||
if ( i.toLowerCase() === "content-type" ) {
|
||||
s.contentType = s.headers[ i ] || "";
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
return jQuery;
|
||||
} );
|
||||
|
@ -1326,6 +1326,52 @@ QUnit.module( "ajax", {
|
||||
};
|
||||
} );
|
||||
|
||||
ajaxTest( "jQuery.ajax() - don't escape %20 with contentType override (gh-4119)", 1, function( assert ) {
|
||||
return {
|
||||
url: "bogus.html",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
headers: { "content-type": "application/json" },
|
||||
method: "post",
|
||||
dataType: "json",
|
||||
data: "{\"val\":\"%20\"}",
|
||||
beforeSend: function( _, s ) {
|
||||
assert.strictEqual( s.data, "{\"val\":\"%20\"}", "data is not %20-encoded" );
|
||||
return false;
|
||||
},
|
||||
error: true
|
||||
};
|
||||
} );
|
||||
|
||||
ajaxTest( "jQuery.ajax() - escape %20 with contentType override (gh-4119)", 1, function( assert ) {
|
||||
return {
|
||||
url: "bogus.html",
|
||||
contentType: "application/json",
|
||||
headers: { "content-type": "application/x-www-form-urlencoded" },
|
||||
method: "post",
|
||||
dataType: "json",
|
||||
data: "{\"val\":\"%20\"}",
|
||||
beforeSend: function( _, s ) {
|
||||
assert.strictEqual( s.data, "{\"val\":\"+\"}", "data is %20-encoded" );
|
||||
return false;
|
||||
},
|
||||
error: true
|
||||
};
|
||||
} );
|
||||
|
||||
ajaxTest( "jQuery.ajax() - override contentType with header (gh-4119)", 1, function( assert ) {
|
||||
return {
|
||||
url: "bogus.html",
|
||||
contentType: "application/json",
|
||||
headers: { "content-type": "application/x-www-form-urlencoded" },
|
||||
beforeSend: function( _, s ) {
|
||||
assert.strictEqual( s.contentType, "application/x-www-form-urlencoded",
|
||||
"contentType is overwritten" );
|
||||
return false;
|
||||
},
|
||||
error: true
|
||||
};
|
||||
} );
|
||||
|
||||
ajaxTest( "jQuery.ajax() - data - no processing POST", 1, function( assert ) {
|
||||
return {
|
||||
url: "bogus.html",
|
||||
|
Loading…
Reference in New Issue
Block a user