Fix for http://dev.jquery.com/ticket/6451
authormalsup <malsup@gmail.com>
Thu, 29 Apr 2010 03:45:34 +0000 (11:45 +0800)
committerJohn Resig <jeresig@gmail.com>
Tue, 15 Jun 2010 03:02:26 +0000 (11:02 +0800)
src/ajax.js
test/unit/ajax.js

index 7cf280a..ffd870c 100644 (file)
@@ -237,17 +237,24 @@ jQuery.extend({
                        s.dataType = "script";
 
                        // Handle JSONP-style loading
-                       window[ jsonp ] = window[ jsonp ] || function( tmp ) {
+                       var customJsonp = window[ jsonp ];
+                       window[ jsonp ] = function( tmp ) {
                                data = tmp;
                                jQuery.ajax.handleSuccess( s, xhr, status, data );
                                jQuery.ajax.handleComplete( s, xhr, status, data );
-                               // Garbage collect
-                               window[ jsonp ] = undefined;
-
-                               try {
-                                       delete window[ jsonp ];
-                               } catch( jsonpError ) {}
-
+                               
+                               if ( jQuery.isFunction( customJsonp ) ) {
+                                   customJsonp( tmp );
+                           }
+                           else {
+                               // Garbage collect
+                               window[ jsonp ] = undefined;
+
+                               try {
+                                       delete window[ jsonp ];
+                               } catch( jsonpError ) {}
+                }
+                
                                if ( head ) {
                                        head.removeChild( script );
                                }
@@ -436,8 +443,9 @@ jQuery.extend({
                                }
 
                                // Fire the complete handlers
-                               jQuery.ajax.handleComplete( s, xhr, status, data );
-
+                               if ( !jsonp ) {
+                                   jQuery.ajax.handleComplete( s, xhr, status, data );
+                }
                                if ( isTimeout === "timeout" ) {
                                        xhr.abort();
                                }
index be4b3f0..fe44ba3 100644 (file)
@@ -1225,6 +1225,12 @@ test("jQuery.ajax - Etag support", function() {
        });
 });
 
+
+test("jQuery.ajax - active counter", function() {
+    ok( jQuery.ajax.active == 0, "ajax active counter should be zero: " + jQuery.ajax.active );
+});
+
+
 }
 
 //}