Coerce s.url to string before calling replace, since replace is also a method of...
[jquery.git] / src / ajax.js
index b39bc8d..61b9c43 100644 (file)
@@ -198,7 +198,10 @@ jQuery.extend({
                var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
                        jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
 
-               s.url = s.url.replace( rhash, "" );
+               // toString fixes people passing a window.location or
+               // document.location to $.ajax, which worked in 1.4.2 and
+               // earlier (bug #7531). It should be removed in 1.5.
+               s.url = s.url.toString().replace( rhash, "" );
 
                // Use original (not extended) context object if it was provided
                s.context = origSettings && origSettings.context != null ? origSettings.context : s;
@@ -208,12 +211,6 @@ jQuery.extend({
                        s.data = jQuery.param( s.data, s.traditional );
                }
 
-               // If the jsonpCallback has been set, we can assume that dataType is jsonp
-               // Ticket #5803
-               if ( s.jsonpCallback ) {
-                 s.dataType = "jsonp";
-               }
-
                // Handle JSONP Parameter Callbacks
                if ( s.dataType === "jsonp" ) {
                        if ( type === "GET" ) {
@@ -469,10 +466,11 @@ jQuery.extend({
                try {
                        var oldAbort = xhr.abort;
                        xhr.abort = function() {
-                               // xhr.abort in IE7 is not a native JS function
-                               // and does not have a call property
-                               if ( xhr && oldAbort.call ) {
-                                       oldAbort.call( xhr );
+                               if ( xhr ) {
+                                       // oldAbort has no call property in IE7 so
+                                       // just do it this way, which works in all
+                                       // browsers
+                                       Function.prototype.call.call( oldAbort, xhr );
                                }
 
                                onreadystatechange( "abort" );
@@ -512,11 +510,12 @@ jQuery.extend({
        // Serialize an array of form elements or a set of
        // key/values into a query string
        param: function( a, traditional ) {
-               var s = [], add = function( key, value ) {
-                       // If value is a function, invoke it and return its value
-                       value = jQuery.isFunction(value) ? value() : value;
-                       s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
-               };
+               var s = [],
+                       add = function( key, value ) {
+                               // If value is a function, invoke it and return its value
+                               value = jQuery.isFunction(value) ? value() : value;
+                               s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+                       };
                
                // Set traditional to true for jQuery <= 1.3.2 behavior.
                if ( traditional === undefined ) {