Fixes #2994. Not finding a transport now fires the error callbacks and doesn't make...
[jquery.git] / src / ajax / script.js
index 75f34fc..ee1d489 100644 (file)
@@ -14,20 +14,23 @@ jQuery.ajaxSetup({
        converters: {
                "text script": jQuery.globalEval
        }
-});
 
-// Bind script tag hack transport
-jQuery.ajax.transport("script", function(s) {
+// Handle cache's special case and global
+}).ajaxPrefilter("script", function(s) {
 
-       // Handle cache special case
        if ( s.cache === undefined ) {
                s.cache = false;
        }
 
-       // This transport only deals with cross domain get requests
-       if ( s.crossDomain && s.async && ( s.type === "GET" || ! s.data ) ) {
-
+       if ( s.crossDomain ) {
                s.global = false;
+       }
+
+// Bind script tag hack transport
+}).ajaxTransport("script", function(s) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
 
                var script,
                        head = document.getElementsByTagName("head")[0] || document.documentElement;
@@ -47,7 +50,7 @@ jQuery.ajax.transport("script", function(s) {
                                script.src = s.url;
 
                                // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _ , statusText) {
+                               script.onload = script.onreadystatechange = function( _ , isAbort ) {
 
                                        if ( ! script.readyState || /loaded|complete/.test( script.readyState ) ) {
 
@@ -59,10 +62,13 @@ jQuery.ajax.transport("script", function(s) {
                                                        head.removeChild( script );
                                                }
 
+                                               // Dereference the script
                                                script = 0;
 
-                                               // Callback
-                                               callback( statusText ? 0 : 200, statusText || "success" );
+                                               // Callback if not abort
+                                               if ( ! isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
                                        }
                                };
                                // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
@@ -70,9 +76,9 @@ jQuery.ajax.transport("script", function(s) {
                                head.insertBefore( script, head.firstChild );
                        },
 
-                       abort: function(statusText) {
+                       abort: function() {
                                if ( script ) {
-                                       script.onload( 0 , statusText );
+                                       script.onload(0,1);
                                }
                        }
                };