X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=ajax%2Fajax.js;h=f6a1d9e20ff6fbb117616d57414a98bdcf710c45;hb=0027439156fb97bef30f6084d85898ec5b16155f;hp=2586f3f8fe81f1e85c25fbec2ae828f7ae375ca4;hpb=6ae392a4e57834224b2a686d774ab210da25daa5;p=jquery.git diff --git a/ajax/ajax.js b/ajax/ajax.js index 2586f3f..f6a1d9e 100644 --- a/ajax/ajax.js +++ b/ajax/ajax.js @@ -83,7 +83,7 @@ if ( jQuery.browser == "msie" ) // Attach a bunch of functions for handling common AJAX events (function(){ - var e = "ajaxStart.ajaxComplete.ajaxError.ajaxSuccess".split(','); + var e = "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess".split(','); for ( var i = 0; i < e.length; i++ ){ (function(){ var o = e[i]; @@ -105,6 +105,10 @@ jQuery.ajax = function( type, url, data, ret ) { url = type.url; type = type.type; } + + // Watch for a new set of requests + if ( ! jQuery.ajax.active++ ) + jQuery.event.trigger( "ajaxStart" ); // Create the request object var xml = new XMLHttpRequest(); @@ -125,23 +129,8 @@ jQuery.ajax = function( type, url, data, ret ) { // Wait for a response to come back xml.onreadystatechange = function(){ - // Socket is openend - if ( xml.readyState == 1 ) { - // Increase counter - jQuery.ajax.active++; - - // Show 'loader' - jQuery.event.trigger( "ajaxStart" ); - } - - // Socket is closed and data is available + // The transfer is complete and the data is available if ( xml.readyState == 4 ) { - // Hide loader if needed - if ( ! --jQuery.ajax.active ) { - jQuery.event.trigger( "ajaxComplete" ); - jQuery.ajax.active = 0 - } - // Make sure that the request was successful if ( jQuery.httpSuccess( xml ) ) { @@ -159,6 +148,13 @@ jQuery.ajax = function( type, url, data, ret ) { // Fire the global callback jQuery.event.trigger( "ajaxError" ); } + + // The request was completed + jQuery.event.trigger( "ajaxComplete" ); + + // Handle the global AJAX counter + if ( ! --jQuery.ajax.active ) + jQuery.event.trigger( "ajaxStop" ); // Process result if ( ret ) ret(xml); @@ -174,15 +170,21 @@ jQuery.ajax.active = 0; // Determines if an XMLHttpRequest was successful or not jQuery.httpSuccess = function(r) { - return ( r.status && ( r.status >= 200 && r.status < 300 ) || - r.status == 304 ) || !r.status && location.protocol == "file:"; + try { + return r.status ? + ( r.status >= 200 && r.status < 300 ) || r.status == 304 : + location.protocol == "file:"; + } catch(e){} + return false; }; -// Get the data out of an XMLHttpRequest +// Get the data out of an XMLHttpRequest. +// Return parsed XML if content-type header is "xml" and type is "xml" or omitted, +// otherwise return plain text. jQuery.httpData = function(r,type) { - // Check the headers, or watch for a force override - return r.getResponseHeader("content-type").indexOf("xml") > 0 || - type == "xml" ? r.responseXML : r.responseText; + var ct = r.getResponseHeader("content-type"); + var xml = ( !type || type == "xml" ) && ct && ct.indexOf("xml") >= 0; + return xml ? r.responseXML : r.responseText; }; // Serialize an array of form elements or a set of