mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Ajax: Execute JSONP error script responses
Issue gh-4379 was meant to be a bug fix but the JSONP case is a bit special:
under the hood it's a script but it simulates JSON responses in an environment
without a CORS setup and sending JSON payloads on error responses is quite
typical there.
This commit makes JSONP error responses still execute the payload. The regular
script error responses continue to be skipped.
Fixes gh-4771
Closes gh-4773
(cherry picked from commit a1e619b03a
)
This commit is contained in:
parent
beea433d33
commit
3bae54aa50
@ -745,8 +745,10 @@ jQuery.extend( {
|
|||||||
response = ajaxHandleResponses( s, jqXHR, responses );
|
response = ajaxHandleResponses( s, jqXHR, responses );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use a noop converter for missing script
|
// Use a noop converter for missing script but not if jsonp
|
||||||
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
|
if ( !isSuccess &&
|
||||||
|
jQuery.inArray( "script", s.dataTypes ) > -1 &&
|
||||||
|
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
|
||||||
s.converters[ "text script" ] = function() {};
|
s.converters[ "text script" ] = function() {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,6 +837,19 @@ QUnit.module( "ajax", {
|
|||||||
};
|
};
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
ajaxTest( "jQuery.ajax() - do execute scripts if JSONP from unsuccessful responses", 1, function( assert ) {
|
||||||
|
var testMsg = "Unsuccessful JSONP requests should have a JSON body";
|
||||||
|
return {
|
||||||
|
dataType: "jsonp",
|
||||||
|
url: url( "mock.php?action=errorWithScript" ),
|
||||||
|
// error is the significant assertion
|
||||||
|
error: function( xhr ) {
|
||||||
|
var expected = { "status": 404, "msg": "Not Found" };
|
||||||
|
assert.deepEqual( xhr.responseJSON, expected, testMsg );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} );
|
||||||
|
|
||||||
ajaxTest( "jQuery.ajax() - do not execute scripts from unsuccessful responses (gh-4250)", 11, function( assert ) {
|
ajaxTest( "jQuery.ajax() - do not execute scripts from unsuccessful responses (gh-4250)", 11, function( assert ) {
|
||||||
var globalEval = jQuery.globalEval;
|
var globalEval = jQuery.globalEval;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user