X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax%2Fajax.js;h=e9580aa8a2d8a75a27299aa422cf40c679233935;hb=a4ec609b6a52a3c0f791d5426c1a5816b23e6956;hp=d8494d3fb25ae0195637d324c03e6ac6ba9b3ef2;hpb=5ec5de6953a22b33de46897c8e915eed300338e6;p=jquery.git diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index d8494d3..e9580aa 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -144,6 +144,8 @@ jQuery.extend({ // Watch for a new set of requests if ( ! jQuery.active++ ) jQuery.event.trigger( "ajaxStart" ); + + var requestDone = false; // Create the request object var xml = new XMLHttpRequest(); @@ -170,8 +172,10 @@ jQuery.extend({ // Wait for a response to come back var onreadystatechange = function(istimeout){ // The transfer is complete and the data is available, or the request timed out - if ( xml && (xml.readyState == 4 || istimeout) ) { - var status = jQuery.httpSuccess( xml ) && !istimeout ? + if ( xml && (xml.readyState == 4 || istimeout == "timeout") ) { + requestDone = true; + + var status = jQuery.httpSuccess( xml ) && istimeout != "timeout" ? ifModified && jQuery.httpNotModified( xml, url ) ? "notmodified" : "success" : "error"; // Make sure that the request was successful or notmodified @@ -221,8 +225,7 @@ jQuery.extend({ // Cancel the request xml.abort(); - // for Opera. Opera does't call onreadystatechange when aborted. - if (xml) onreadystatechange(1); + if ( !requestDone ) onreadystatechange( "timeout" ); // Clear from memory xml = null; @@ -239,9 +242,9 @@ jQuery.extend({ // Determines if an XMLHttpRequest was successful or not httpSuccess: function(r) { try { - return r.status ? - ( r.status >= 200 && r.status < 300 ) || r.status == 304 : - location.protocol == "file:"; + return !r.status && location.protocol == "file:" || + ( r.status >= 200 && r.status < 300 ) || r.status == 304 || + jQuery.browser.safari && r.status == undefined; } catch(e){} return false; @@ -253,7 +256,8 @@ jQuery.extend({ var xmlRes = xml.getResponseHeader("Last-Modified"); // Firefox always returns 200. check Last-Modified date - if( xml.status == 304 || xmlRes == jQuery.lastModified[url] ) return true; + return xml.status == 304 || xmlRes == jQuery.lastModified[url] || + jQuery.browser.safari && xml.status == undefined; } catch(e){} return false; @@ -264,8 +268,8 @@ jQuery.extend({ // otherwise return plain text. httpData: function(r,type) { var ct = r.getResponseHeader("content-type"); - var data = ( !type || type == "xml" ) && ct && ct.indexOf("xml") >= 0; - data = data ? r.responseXML : r.responseText; + var data = !type && ct && ct.indexOf("xml") >= 0; + data = type == "xml" || data ? r.responseXML : r.responseText; // If the type is "script", eval it if ( type == "script" ) eval.call( window, data );