Added in support for $.ajax jsonpCallback (allowing you to specify the name of the...
[jquery.git] / src / ajax.js
index 1e0729f..7c5c838 100644 (file)
@@ -195,10 +195,8 @@ jQuery.extend({
        lastModified: {},
        etag: {},
 
-       ajax: function( s ) {
-               // Extend the settings, but re-extend 's' so that it can be
-               // checked again later (in the test suite, specifically)
-               s = jQuery.extend(true, {}, jQuery.ajaxSettings, s);
+       ajax: function( origSettings ) {
+               var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
                
                var jsonp, status, data,
                        callbackContext = s.context || window,
@@ -223,7 +221,7 @@ jQuery.extend({
 
                // Build temporary JSONP function
                if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
-                       jsonp = "jsonp" + jsc++;
+                       jsonp = s.jsonpCallback || ("jsonp" + jsc++);
 
                        // Replace the =? sequence both in the query string and the data
                        if ( s.data ) {
@@ -237,7 +235,7 @@ jQuery.extend({
                        s.dataType = "script";
 
                        // Handle JSONP-style loading
-                       window[ jsonp ] = function(tmp){
+                       window[ jsonp ] = window[ jsonp ] || function(tmp){
                                data = tmp;
                                success();
                                complete();
@@ -333,7 +331,7 @@ jQuery.extend({
                // Need an extra try/catch for cross domain requests in Firefox 3
                try {
                        // Set the correct header, if data is being sent
-                       if ( s.data ) {
+                       if ( s.data || origSettings && origSettings.contentType ) {
                                xhr.setRequestHeader("Content-Type", s.contentType);
                        }
 
@@ -604,19 +602,19 @@ jQuery.extend({
                
                // If an array was passed in, assume that it is an array
                // of form elements
-               if ( jQuery.isArray(a) || a.jquery )
+               if ( jQuery.isArray(a) || a.jquery ) {
                        // Serialize the form elements
                        jQuery.each( a, function() {
                                add( this.name, this.value );
                        });
                        
-               else
+               } else {
                        // Encode parameters from object, recursively. If
                        // jQuery.param.traditional is set, encode the "old" way
                        // (the way 1.3.2 or older did it)
                        jQuery.each( a, function buildParams( prefix, obj ) {
                                
-                               if ( jQuery.isArray(obj) )
+                               if ( jQuery.isArray(obj) ) {
                                        jQuery.each( obj, function(i,v){
                                                // Due to rails' limited request param syntax, numeric array
                                                // indices are not supported. To avoid serialization ambiguity
@@ -626,20 +624,20 @@ jQuery.extend({
                                                add( prefix + ( param_traditional ? "" : "[]" ), v );
                                        });
                                        
-                               else if ( typeof obj == "object" )
-                                       if ( param_traditional )
+                               } else if ( typeof obj == "object" ) {
+                                       if ( param_traditional ) {
                                                add( prefix, obj );
                                                
-                                       else
+                                       } else {
                                                jQuery.each( obj, function(k,v){
                                                        buildParams( prefix ? prefix + "[" + k + "]" : k, v );
                                                });
-                                       
-                               else
+                                       }
+                               } else {
                                        add( prefix, obj );
-                               
+                               }
                        });
-
+               }
                // Return the resulting serialization
                return s.join("&").replace(r20, "+");
        }