X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=ajax%2Fajax.js;h=5d6126af293db7f03d85e578be64d6bc9ed7cc1f;hb=6bf8667410f10dc505b81261a568e6a42e1ce809;hp=72aa82fbafcb98b248a9f07ccce7e4ef54c0dd18;hpb=c3c706d3f24dbad0fdeb80fe9caf158bd9d6de66;p=jquery.git diff --git a/ajax/ajax.js b/ajax/ajax.js index 72aa82f..5d6126a 100644 --- a/ajax/ajax.js +++ b/ajax/ajax.js @@ -5,7 +5,7 @@ /** * Load HTML from a remote file and inject it into the DOM */ -$.fn.load = function( url, params, callback ) { +jQuery.prototype.load = function( url, params, callback ) { // I overwrote the event plugin's .load // this won't happen again, I hope -John if ( url && url.constructor == Function ) @@ -24,7 +24,7 @@ $.fn.load = function( url, params, callback ) { // Otherwise, build a param string } else { - params = $.param( params ); + params = jQuery.param( params ); type = "POST"; } } @@ -32,7 +32,7 @@ $.fn.load = function( url, params, callback ) { var self = this; // Request the remote document - $.ajax( type, url, params,function(res){ + jQuery.ajax( type, url, params,function(res){ // Inject the HTML into all the matched elements self.html(res.responseText).each(function(){ @@ -55,25 +55,25 @@ $.fn.load = function( url, params, callback ) { /** * Load a remote page using a GET request */ -$.get = function( url, callback, type ) { +jQuery.get = function( url, callback, type ) { // Build and start the HTTP Request - $.ajax( "GET", url, null, function(r) { - if ( callback ) callback( $.httpData(r,type) ); + jQuery.ajax( "GET", url, null, function(r) { + if ( callback ) callback( jQuery.httpData(r,type) ); }); }; /** * Load a remote page using a POST request. */ -$.post = function( url, data, callback, type ) { +jQuery.post = function( url, data, callback, type ) { // Build and start the HTTP Request - $.ajax( "POST", url, $.param(data), function(r) { - if ( callback ) callback( $.httpData(r,type) ); + jQuery.ajax( "POST", url, jQuery.param(data), function(r) { + if ( callback ) callback( jQuery.httpData(r,type) ); }); }; // If IE is used, create a wrapper for the XMLHttpRequest object -if ( $.browser == "msie" ) +if ( jQuery.browser == "msie" ) XMLHttpRequest = function(){ return new ActiveXObject( (navigator.userAgent.toLowerCase().indexOf("msie 5") >= 0) ? @@ -83,18 +83,18 @@ if ( $.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]; - $.fn[o] = function(f){return this.bind(o, f);}; + jQuery.fn[o] = function(f){return this.bind(o, f);}; })();} })(); /** * A common wrapper for making XMLHttpRequests */ -$.ajax = function( type, url, data, ret ) { +jQuery.ajax = function( type, url, data, ret ) { // If only a single argument was passed in, // assume that it is a object of key/value pairs if ( !url ) { @@ -105,6 +105,10 @@ $.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,31 +129,16 @@ $.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 - $.ajax.active++; - - // Show 'loader' - $.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 ( ! --$.ajax.active ) { - $.event.trigger( "ajaxComplete" ); - $.ajax.active = 0 - } - // Make sure that the request was successful - if ( $.httpSuccess( xml ) ) { + if ( jQuery.httpSuccess( xml ) ) { // If a local callback was specified, fire it if ( success ) success( xml ); // Fire the global callback - $.event.trigger( "ajaxSuccess" ); + jQuery.event.trigger( "ajaxSuccess" ); // Otherwise, the request was not successful } else { @@ -157,8 +146,15 @@ $.ajax = function( type, url, data, ret ) { if ( error ) error( xml ); // Fire the global callback - $.event.trigger( "ajaxError" ); + 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); @@ -170,16 +166,16 @@ $.ajax = function( type, url, data, ret ) { }; // Counter for holding the number of active queries -$.ajax.active = 0; +jQuery.ajax.active = 0; // Determines if an XMLHttpRequest was successful or not -$.httpSuccess = function(r) { +jQuery.httpSuccess = function(r) { return ( r.status && ( r.status >= 200 && r.status < 300 ) || r.status == 304 ) || !r.status && location.protocol == "file:"; }; // Get the data out of an XMLHttpRequest -$.httpData = function(r,type) { +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; @@ -187,7 +183,7 @@ $.httpData = function(r,type) { // Serialize an array of form elements or a set of // key/values into a query string -$.param = function(a) { +jQuery.param = function(a) { var s = []; // If an array was passed in, assume that it is an array