From: jaubourg <j@ubourg.net>
Date: Thu, 20 Jan 2011 14:39:30 +0000 (+0100)
Subject: Makes sure statusCode callbacks are ordered in the same way success and error callbac... 
X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=9ab00a712fe3757f130dce8b42293c82a68c690e;p=jquery.git

Makes sure statusCode callbacks are ordered in the same way success and error callbacks are. Unit tests added.
---

diff --git a/src/ajax.js b/src/ajax.js
index fc1ecfd..63914d2 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 d262988..1ed15b5 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() {