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;
|
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 ) {
|
ajaxTest( "jQuery.ajax() - data - no processing POST", 1, function( assert ) {
|
||||||
return {
|
return {
|
||||||
url: "bogus.html",
|
url: "bogus.html",
|
||||||
|
Loading…
Reference in New Issue
Block a user