The isTimeout fix from #970 was causing unintended status bugs (fixed). This also...
[jquery.git] / src / ajax / ajax.js
index b6c4088..d72ddc6 100644 (file)
@@ -132,12 +132,6 @@ jQuery.fn.extend({
 
 });
 
-// If IE is used, create a wrapper for the XMLHttpRequest object
-if ( !window.XMLHttpRequest )
-       XMLHttpRequest = function(){
-               return new ActiveXObject("Microsoft.XMLHTTP");
-       };
-
 // Attach a bunch of functions for handling common AJAX events
 
 /**
@@ -414,11 +408,8 @@ jQuery.extend({
                });
        },
 
-       // timeout (ms)
-       //timeout: 0,
-
        /**
-        * Set the timeout of all AJAX requests to a specific amount of time.
+        * Set the timeout in milliseconds of all AJAX requests to a specific amount of time.
         * This will make all future AJAX requests timeout after a specified amount
         * of time.
         *
@@ -434,7 +425,7 @@ jQuery.extend({
         *
         * @name $.ajaxTimeout
         * @type undefined
-        * @param Number time How long before an AJAX request times out.
+        * @param Number time How long before an AJAX request times out, in milliseconds.
         * @cat Ajax
         */
        ajaxTimeout: function( timeout ) {
@@ -520,7 +511,7 @@ jQuery.extend({
         * response has changed since the last request. This is done by checking the
         * Last-Modified header. Default value is false, ignoring the header.
         *
-        * (Number) timeout - Local timeout to override global timeout, eg. to give a
+        * (Number) timeout - Local timeout in milliseconds to override global timeout, eg. to give a
         * single request a longer timeout while all others timeout after 1 second.
         * See $.ajaxTimeout() for global timeouts.
         *
@@ -624,8 +615,9 @@ jQuery.extend({
 
                var requestDone = false;
 
-               // Create the request object
-               var xml = new XMLHttpRequest();
+               // Create the request object; Microsoft failed to properly
+               // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
+               var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
 
                // Open the socket
                xml.open(s.type, s.url, s.async);
@@ -642,10 +634,6 @@ jQuery.extend({
                // Set header so the called script knows that it's an XMLHttpRequest
                xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
 
-               // Make sure the browser sends the right content length
-               if ( xml.overrideMimeType )
-                       xml.setRequestHeader("Connection", "close");
-                       
                // Allow custom headers/mimetypes
                if( s.beforeSend )
                        s.beforeSend(xml);
@@ -667,10 +655,12 @@ jQuery.extend({
                                
                                var status;
                                try {
-                                       status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
-                                               s.ifModified && jQuery.httpNotModified( xml, s.url ) ? "notmodified" : "success" : "error";
+                                       status = isTimeout == "timeout" && "timeout" ||
+                                                                       !jQuery.httpSuccess( xml ) && "error" ||
+                                                                       s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
+                                                                       "success";
                                        // Make sure that the request was successful or notmodified
-                                       if ( status != "error" ) {
+                                       if ( status != "error" && status != "timeout" ) {
                                                // Cache Last-Modified header, if ifModified mode.
                                                var modRes;
                                                try {
@@ -797,7 +787,7 @@ jQuery.extend({
 
                // Get the JavaScript object, if JSON is used.
                if ( type == "json" )
-                       eval( "data = " + data );
+                       data = eval("(" + data + ")");
 
                // evaluate scripts within html
                if ( type == "html" )
@@ -838,13 +828,16 @@ jQuery.extend({
        // evalulates a script in global context
        // not reliable for safari
        globalEval: function( data ) {
-               if ( window.execScript )
-                       window.execScript( data );
-               else if ( jQuery.browser.safari )
-                       // safari doesn't provide a synchronous global eval
-                       window.setTimeout( data, 0 );
-               else
-                       eval.call( window, data );
+               data = jQuery.trim( data );
+               if ( data ) {
+                       if ( window.execScript )
+                               window.execScript( data );
+                       else if ( jQuery.browser.safari )
+                               // safari doesn't provide a synchronous global eval
+                               window.setTimeout( data, 0 );
+                       else
+                               eval.call( window, data );
+               }
        }
 
 });