diff --git a/src/ajax.js b/src/ajax.js index fc1ecfde..63914d23 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -427,10 +427,8 @@ jQuery.extend({ // Stored error error, - // Keep track of statusCode callbacks - oldStatusCode = statusCode; - - statusCode = undefined; + // To keep track of statusCode based callbacks + oldStatusCode; // If successful, handle type chaining if ( status >= 200 && status < 300 || status === 304 ) { @@ -588,6 +586,8 @@ jQuery.extend({ } // Status-dependent callbacks + oldStatusCode = statusCode; + statusCode = undefined; jXHR.statusCode( oldStatusCode ); if ( s.global ) { diff --git a/test/unit/ajax.js b/test/unit/ajax.js index d262988e..1ed15b50 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -1911,9 +1911,9 @@ test( "jQuery.ajax - Location object as url (#7531)", 1, function () { test( "jQuery.ajax - statusCode" , function() { - var count = 10; + var count = 12; - expect( 16 ); + expect( 20 ); stop(); function countComplete() { @@ -1975,8 +1975,35 @@ test( "jQuery.ajax - statusCode" , function() { } }).statusCode( createStatusCodes( "all (immediately with method)" , isSuccess ) ); - }); + var testString = ""; + jQuery.ajax( url( uri ), { + success: function( a , b , jXHR ) { + ok( isSuccess , "success" ); + var statusCode = {}; + statusCode[ jXHR.status ] = function() { + testString += "B"; + }; + jXHR.statusCode( statusCode ); + testString += "A"; + }, + error: function( jXHR ) { + ok( ! isSuccess , "error" ); + var statusCode = {}; + statusCode[ jXHR.status ] = function() { + testString += "B"; + }; + jXHR.statusCode( statusCode ); + testString += "A"; + }, + complete: function() { + strictEqual( testString , "AB" , "Test statusCode callbacks are ordered like " + + ( isSuccess ? "success" : "error" ) + " callbacks" ); + countComplete(); + } + } ); + + }); }); test("jQuery.ajax - active counter", function() {