From b9e0b6ff37ab837ef2e031bac23c36ee3007cc46 Mon Sep 17 00:00:00 2001
From: John Resig <jeresig@gmail.com>
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 3926134..bd08f83 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 )
-- 
1.7.10.4