Fixed #1557, although it doesn't appear to be just an FF3 problem. In this case,...
[jquery.git] / src / ajax.js
index 8261b44..6821cec 100644 (file)
@@ -179,7 +179,7 @@ jQuery.extend({
 
                        // Replace the =? sequence both in the query string and the data
                        if ( s.data )
-                               s.data = s.data.replace(jsre, "=" + jsonp);
+                               s.data = (s.data + "").replace(jsre, "=" + jsonp);
                        s.url = s.url.replace(jsre, "=" + jsonp);
 
                        // We need to make sure
@@ -217,7 +217,7 @@ jQuery.extend({
 
                // If we're requesting a remote document
                // and trying to load JSON or Script
-               if ( !s.url.indexOf("http") && s.dataType == "script" ) {
+               if ( !s.url.indexOf("http") && ( s.dataType == "script" || s.dataType =="json" ) ) {
                        var head = document.getElementsByTagName("head")[0];
                        var script = document.createElement("script");
                        script.src = s.url;
@@ -270,7 +270,7 @@ jQuery.extend({
                        s.beforeSend(xml);
                        
                if ( s.global )
-                   jQuery.event.trigger("ajaxSend", [xml, s]);
+                       jQuery.event.trigger("ajaxSend", [xml, s]);
 
                // Wait for a response to come back
                var onreadystatechange = function(isTimeout){
@@ -397,8 +397,9 @@ jQuery.extend({
        // Determines if an XMLHttpRequest was successful or not
        httpSuccess: function( r ) {
                try {
+                       // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
                        return !r.status && location.protocol == "file:" ||
-                               ( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
+                               ( r.status >= 200 && r.status < 300 ) || r.status == 304 || r.status == 1223 ||
                                jQuery.browser.safari && r.status == undefined;
                } catch(e){}
                return false;