diff options
author | jaubourg <j@ubourg.net> | 2011-01-13 17:01:25 +0100 |
---|---|---|
committer | jaubourg <j@ubourg.net> | 2011-01-13 17:01:25 +0100 |
commit | 44fc87f66ca54278e37f15885a80c2407036df57 (patch) | |
tree | 660b63f9f53bef80b9c60df7b09dfdfc27900743 /src/ajax.js | |
parent | 57956152d8a9d23ae97ba576b8ec4b63306c8758 (diff) | |
download | jquery-44fc87f66ca54278e37f15885a80c2407036df57.tar.gz jquery-44fc87f66ca54278e37f15885a80c2407036df57.zip |
Fixes #4964. Adds a statusCode object together with a new statusCode method on the jXHR object (deferred behaviour). They accept a map of statusCode/callback(s). Callbacks are fired when the status code of the response correponds to the key (as a success or an error callback depending on how the request completed). Unit tests added.
Diffstat (limited to 'src/ajax.js')
-rw-r--r-- | src/ajax.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ajax.js b/src/ajax.js index c2dc3e404..a2ef4397b 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -265,6 +265,8 @@ jQuery.extend({ // Deferreds deferred = jQuery.Deferred(), completeDeferred = jQuery._Deferred(), + // Status-dependent callbacks + statusCode = s.statusCode || {}, // Headers (they are sent all at once) requestHeaders = {}, // Response headers @@ -520,6 +522,9 @@ jQuery.extend({ deferred.fireReject( callbackContext , [ jXHR , statusText , error ] ); } + // Status-dependent callbacks + jXHR.statusCode( statusCode ); + if ( s.global ) { globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ) , [ jXHR , s , isSuccess ? success : error ] ); @@ -543,6 +548,28 @@ jQuery.extend({ jXHR.error = jXHR.fail; jXHR.complete = completeDeferred.done; + // Status-dependent callbacks + jXHR.statusCode = function( map ) { + if ( map ) { + var resolved = jXHR.isResolved(), + tmp; + if ( resolved || jXHR.isRejected() ) { + tmp = map[ jXHR.status ]; + if ( tmp ) { + if ( map === statusCode ) { + delete statusCode[ jXHR.status ]; + } + jXHR[ resolved ? "done" : "fail" ]( tmp ); + } + } else { + for( tmp in map ) { + statusCode[ tmp ] = [ statusCode[ tmp ] , map[ tmp ] ]; + } + } + } + return this; + }; + // Remove hash character (#7531: and string promotion) s.url = ( "" + s.url ).replace( rhash , "" ); |