Coerce s.url to string before calling replace, since replace is also a method of...
[jquery.git] / src / ajax.js
index 9195bcc..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;
@@ -463,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" );