aboutsummaryrefslogtreecommitdiffstats
path: root/src/ajax.js
diff options
context:
space:
mode:
authorjaubourg <j@ubourg.net>2011-01-13 17:01:25 +0100
committerjaubourg <j@ubourg.net>2011-01-13 17:01:25 +0100
commit44fc87f66ca54278e37f15885a80c2407036df57 (patch)
tree660b63f9f53bef80b9c60df7b09dfdfc27900743 /src/ajax.js
parent57956152d8a9d23ae97ba576b8ec4b63306c8758 (diff)
downloadjquery-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.js27
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 , "" );