From b9e0b6ff37ab837ef2e031bac23c36ee3007cc46 Mon Sep 17 00:00:00 2001 From: John Resig Date: Mon, 27 Mar 2006 07:08:32 +0000 Subject: [PATCH] Added support for global AJAX callbacks and Form Serialization. --- ajax/ajax.js | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/ajax/ajax.js b/ajax/ajax.js index 3926134c..bd08f83e 100644 --- a/ajax/ajax.js +++ b/ajax/ajax.js @@ -18,10 +18,12 @@ $.xml = function( type, url, data, ret ) { if ( data ) xml.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - if ( ret ) - xml.onreadystatechange = function() { - if ( xml.readyState == 4 ) ret(xml); - }; + xml.onreadystatechange = function() { + if ( xml.readyState == 4 ) { + if ( ret ) ret(xml); + $.triggerAJAX( $.httpData(xml) ); + } + }; xml.send(data) } @@ -52,6 +54,37 @@ $.postXML = function( url, data, ret ) { $.post( url, data, ret, "xml" ); }; +// Global AJAX Event Binding +// Requested here: +// http://jquery.com/discuss/2006-March/000415/ + +$.fn.handleAJAX = function( callback ) { + $.ajaxHandles = $.merge( $.ajaxHandles, this.cur ); + return this.bind( 'ajax', callback ); +}; + +$.ajaxHandles = []; +$.triggerAJAX = function(data){ + for ( var i = 0; i < $.ajaxHandles.length; i++ ) + triggerEvent( $.ajaxHandles[i], 'ajax', [data] ); +}; + +// Dynamic Form Submission +// Based upon the mailing list post at: +// http://jquery.com/discuss/2006-March/000424/ + +$.fn.serialize = function(callback) { + return this.each(function(){ + var a = {}; + $(this) + .find("input:checked,hidden,text,option[@selected],textarea") + .filter(":enabled").each(function() { + a[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value; + }); + $.xml( this.method || "GET", this.action || "", $.param(a), callback ); + }); +}; + $.param = function(a) { var s = []; for ( var i in a )