Make sure that jQuery works even when the individual modules are loaded separately...
[jquery.git] / src / ajax.js
index 360c87c..52a5a22 100644 (file)
@@ -1,4 +1,6 @@
-var jsc = now(),
+(function( jQuery ) {
+
+var jsc = jQuery.now(),
        rscript = /<script(.|\s)*?\/script>/gi,
        rselectTextarea = /select|textarea/i,
        rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
@@ -83,6 +85,7 @@ jQuery.fn.extend({
        serialize: function() {
                return jQuery.param(this.serializeArray());
        },
+
        serializeArray: function() {
                return this.map(function() {
                        return this.elements ? jQuery.makeArray(this.elements) : this;
@@ -114,7 +117,6 @@ jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".sp
 });
 
 jQuery.extend({
-
        get: function( url, data, callback, type ) {
                // shift arguments if data argument was omited
                if ( jQuery.isFunction( data ) ) {
@@ -198,10 +200,6 @@ jQuery.extend({
                }
        },
 
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {},
-
        ajax: function( origSettings ) {
                var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
                        jsonp, status, data, type = s.type.toUpperCase();
@@ -241,17 +239,25 @@ 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;
+                               
+                               if ( jQuery.isFunction( customJsonp ) ) {
+                                       customJsonp( tmp );
 
-                               try {
-                                       delete window[ jsonp ];
-                               } catch( jsonpError ) {}
+                               } else {
+                                       // Garbage collect
+                                       window[ jsonp ] = undefined;
 
+                                       try {
+                                               delete window[ jsonp ];
+                                       } catch( jsonpError ) {}
+                               }
+                               
                                if ( head ) {
                                        head.removeChild( script );
                                }
@@ -263,7 +269,7 @@ jQuery.extend({
                }
 
                if ( s.cache === false && type === "GET" ) {
-                       var ts = now();
+                       var ts = jQuery.now();
 
                        // try replacing _= if it is there
                        var ret = s.url.replace(rts, "$1_=" + ts + "$2");
@@ -355,8 +361,8 @@ jQuery.extend({
                                        xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
                                }
 
-                               if ( jQuery.etag[s.url] ) {
-                                       xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+                               if ( jQuery.ajax.etag[s.url] ) {
+                                       xhr.setRequestHeader("If-None-Match", jQuery.ajax.etag[s.url]);
                                }
                        }
 
@@ -440,7 +446,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();
@@ -478,7 +486,7 @@ jQuery.extend({
 
                // Send the data
                try {
-                       xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
+                       xhr.send( (type !== "GET" && s.data) || null );
 
                } catch( sendError ) {
                        jQuery.ajax.handleError( s, xhr, null, e );
@@ -567,6 +575,10 @@ jQuery.extend( jQuery.ajax, {
        // Counter for holding the number of active queries
        active: 0,
 
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
        handleError: function( s, xhr, status, e ) {
                // If a local callback was specified, fire it
                if ( s.error ) {
@@ -631,11 +643,11 @@ jQuery.extend( jQuery.ajax, {
                        etag = xhr.getResponseHeader("Etag");
 
                if ( lastModified ) {
-                       jQuery.lastModified[url] = lastModified;
+                       jQuery.ajax.lastModified[url] = lastModified;
                }
 
                if ( etag ) {
-                       jQuery.etag[url] = etag;
+                       jQuery.ajax.etag[url] = etag;
                }
 
                // Opera returns 0 when status is 304
@@ -673,3 +685,8 @@ jQuery.extend( jQuery.ajax, {
        }
 
 });
+
+// For backwards compatibility
+jQuery.extend( jQuery.ajax );
+
+})( jQuery );