]> source.dussan.org Git - jquery.git/commitdiff
Reduced script transport
authorjaubourg <j@ubourg.net>
Wed, 9 Jan 2013 01:01:13 +0000 (02:01 +0100)
committerDave Methvin <dave.methvin@gmail.com>
Sun, 20 Jan 2013 23:08:59 +0000 (18:08 -0500)
src/ajax/script.js

index ac14c44be2efbcb201ce7e842acb56dd6b69693d..b5d377571a5f741bdbdb40a07c72a1370638bf64 100644 (file)
@@ -14,71 +14,45 @@ jQuery.ajaxSetup({
        }
 });
 
-// Handle cache's special case and global
+// Handle cache's special case and crossDomain
 jQuery.ajaxPrefilter( "script", function( s ) {
        if ( s.cache === undefined ) {
                s.cache = false;
        }
        if ( s.crossDomain ) {
                s.type = "GET";
-               s.global = false;
        }
 });
 
 // Bind script tag hack transport
 jQuery.ajaxTransport( "script", function(s) {
-
        // This transport only deals with cross domain requests
        if ( s.crossDomain ) {
-
-               var script,
-                       head = document.head || jQuery("head")[0] || document.documentElement;
-
+               var callback;
                return {
-
-                       send: function( _, callback ) {
-
-                               script = document.createElement("script");
-
-                               script.async = true;
-
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
-                               }
-
-                               script.src = s.url;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-
-                                               // Remove the script
-                                               if ( script.parentNode ) {
-                                                       script.parentNode.removeChild( script );
+                       send: function( _, complete ) {
+                               callback = function( type ) {
+                                       return function() {
+                                               callback = script.onload = script.onerror = null;
+                                               jQuery( script ).remove();
+                                               if ( type ) {
+                                                       complete( type === "success" ? 200 : 404, type );
                                                }
-
-                                               // Dereference the script
-                                               script = null;
-
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
-                                               }
-                                       }
+                                       };
                                };
-
-                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
-                               // Use native DOM manipulation to avoid our domManip AJAX trickery
-                               head.insertBefore( script, head.firstChild );
+                               var script = jQuery.extend( document.createElement("script"), {
+                                               async: true,
+                                               charset: s.scriptCharset,
+                                               src: s.url,
+                                               onload: callback("success"),
+                                               onerror: callback("error")
+                                       });
+                               callback = callback();
+                               document.head.appendChild( script );
                        },
-
                        abort: function() {
-                               if ( script ) {
-                                       script.onload( undefined, true );
+                               if ( callback ) {
+                                       callback();
                                }
                        }
                };