×Ô¼º¶¯ÊÖ·â×°µÄ ajax

¡¡¡¡ÒÔÇ°¿ª·¢ÓÃÁ˺ܶàAJAXµÄ¼¼Êõ±ÈÈçEXT,prototype,jQueryµÈµÈ£¬µ«¶¼ÊÇ¿ªÔ´·â×°ºÃµÄAJAX¿ò¼Ü¡£´ÓûÕæÕýÓùý´¿ÕýµÄAJAX£¬¹Ê²ÎÕÕprototypÃæÏò¶ÔÏó˼Ïë×Ô¼º·â×°ÁËÒ»¸öAJAX¿ò¼Ü¡£Ï£ÍûÄܸø¶ÁÕ߲ο¼¡¢°ïÖú¡¢ÆÀ¼Û¡£

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡/*

¡¡¡¡* ×Ô¼º·â×°µÄajax

¡¡¡¡*

¡¡¡¡*

¡¡¡¡* @author ½ªËÉ

¡¡¡¡* @version 1.00 $date:2009-07-02

¡¡¡¡*

¡¡¡¡* history:

¡¡¡¡*

¡¡¡¡*/

¡¡¡¡Object.extend = function(destination, source) {

¡¡¡¡for (var property in source) {

¡¡¡¡destination[property] = source[property];

¡¡¡¡}

¡¡¡¡return destination;

¡¡¡¡};

¡¡¡¡Object.extend(String.prototype, {

¡¡¡¡include: function(pattern) {

¡¡¡¡return this.indexOf(pattern) > -1;

¡¡¡¡},

¡¡¡¡startsWith: function(pattern) {

¡¡¡¡return this.indexOf(pattern) == 0;

¡¡¡¡},

¡¡¡¡endsWith: function(pattern) {

¡¡¡¡return this.lastIndexOf(pattern) == (this.length - pattern.length);

¡¡¡¡},

¡¡¡¡empty: function() {

¡¡¡¡return /^\s*$/.test(this) || this == undefined || this == null;

¡¡¡¡}

¡¡¡¡});

¡¡¡¡Object.extend(Array.prototype, {

¡¡¡¡each: function(iterator) {

¡¡¡¡try {

¡¡¡¡for (var i = 0, length = this.length; i < length; i++) {

¡¡¡¡iterator(this[i]);

¡¡¡¡}

¡¡¡¡} catch (e) {

¡¡¡¡if (e != 'break') { throw e };

¡¡¡¡}

¡¡¡¡},

¡¡¡¡clear: function() {

¡¡¡¡this.length = 0;

¡¡¡¡return this;

¡¡¡¡},

¡¡¡¡first: function() {

¡¡¡¡return this[0];

¡¡¡¡},

¡¡¡¡last: function() {

¡¡¡¡return this[this.length - 1];

¡¡¡¡},

¡¡¡¡indexOf: function(object) {

¡¡¡¡for (var i = 0, length = this.length; i < length; i++) {

¡¡¡¡if (this[i] == object) {return i};

¡¡¡¡}

¡¡¡¡return -1;

¡¡¡¡},

¡¡¡¡size: function() {

¡¡¡¡return this.length;

¡¡¡¡},

¡¡¡¡include: function(object) {

¡¡¡¡var found = false;

¡¡¡¡this.each(function(value) {

¡¡¡¡if (value == object) {found = true; throw 'break';}

¡¡¡¡});

¡¡¡¡return found;

¡¡¡¡}

¡¡¡¡});

¡¡¡¡function $(element) {

¡¡¡¡if(arguments.length > 1) {

¡¡¡¡for(var i = 0, elements = [], length = arguments.length; i < length; i++) {

¡¡¡¡elements.push($(arguments[i]));

¡¡¡¡}

¡¡¡¡return elements;

¡¡¡¡}

¡¡¡¡if(typeof element == 'string') {

¡¡¡¡element = document.getElementById(element);

¡¡¡¡}

¡¡¡¡return element;

¡¡¡¡};

¡¡¡¡var ajax = {

¡¡¡¡transport: new Object(),

¡¡¡¡options: new Object(),

¡¡¡¡getTransport: function() {

¡¡¡¡if(window.ActiveXObject) {

¡¡¡¡try {

¡¡¡¡return new ActiveXObject('Msxm12.XMLHTTP');

¡¡¡¡} catch(e) {

¡¡¡¡try {

¡¡¡¡return new ActiveXObject('Microsoft.XMLHTTP');

¡¡¡¡} catch(e) {}

¡¡¡¡}

¡¡¡¡} else if(window.XMLHttpRequest) {

¡¡¡¡try {

¡¡¡¡return new XMLHttpRequest();

¡¡¡¡} catch(e) {}

¡¡¡¡}

¡¡¡¡},

¡¡¡¡setOptions: function(options) {

¡¡¡¡ajax.options = {

¡¡¡¡method: 'get',

¡¡¡¡asynchronous: true,

¡¡¡¡contentType: 'application/x-www-form-urlencoded',

¡¡¡¡encoding: 'utf-8',

¡¡¡¡parameters: ''

¡¡¡¡};

¡¡¡¡Object.extend(ajax.options, options);

¡¡¡¡ajax.options.method = ajax.options.method.toUpperCase();

¡¡¡¡},

¡¡¡¡request: function(url, options) {

¡¡¡¡ajax.transport = ajax.getTransport();

¡¡¡¡ajax.setOptions(options);

¡¡¡¡this.method = ajax.options.method;

¡¡¡¡var params = ajax.options.parameters;

¡¡¡¡if (!['GET', 'POST'].include(this.method)) {

¡¡¡¡this.method = 'GET';

¡¡¡¡}

¡¡¡¡if (this.method == 'GET') {

¡¡¡¡url = ajax.setParameters(url, params);

¡¡¡¡}

¡¡¡¡try {

¡¡¡¡ajax.transport.open(this.method, url, ajax.options.asynchronous);

¡¡¡¡ajax.transport.onreadystatechange = ajax.stateChange;

¡¡¡¡ajax.setRequestHeaders();

¡¡¡¡this.body = this.method == 'POST' ? params : null;

¡¡¡¡ajax.transport.send(this.body);

¡¡¡¡} catch (e) {}

¡¡¡¡},

¡¡¡¡stateChange: function() {

¡¡¡¡try {

¡¡¡¡var readyState = ajax.transport.readyState;

¡¡¡¡if(readyState == 4) {

¡¡¡¡var status = ajax.transport.status, transport = ajax, json = ajax.evalJSON();

¡¡¡¡if(status == 200) {

¡¡¡¡ajax.options['onSuccess'](transport, json);

¡¡¡¡} else {

¡¡¡¡ajax.options['onFailure'](transport, json);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡} catch (e) {}

¡¡¡¡},

¡¡¡¡setParameters: function(url, params) {

¡¡¡¡if (params && typeof params == 'string') {

¡¡¡¡url += (url.include('?') ? '&' : '?') + params;

¡¡¡¡} else if (params && typeof params == 'object') {

¡¡¡¡for(var param in params) {

¡¡¡¡url += (url.include('?') ? '&' : '?') + param + '=' + params[param];

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return url;

¡¡¡¡},

¡¡¡¡setRequestHeaders: function() {

¡¡¡¡var headers = {

¡¡¡¡'X-Requested-With': 'XMLHttpRequest',

¡¡¡¡'Accept': 'application/xml, text/xml, text/html, text/javascript, application/javascript, application/json, text/javascript, text/plain, */*',

¡¡¡¡'If-Modified-Since': 'Thu, 01 Jan 1970 00:00:00 GMT'

¡¡¡¡};

¡¡¡¡this.method = ajax.options.method;

¡¡¡¡if (this.method == 'POST') {

¡¡¡¡headers['Content-type'] = ajax.options.contentType +

¡¡¡¡(ajax.options.encoding ? '; charset=' + ajax.options.encoding : '');

¡¡¡¡if (ajax.transport.overrideMimeType &&

¡¡¡¡(navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) {

¡¡¡¡headers['Connection'] = 'close';

¡¡¡¡}

¡¡¡¡}

¡¡¡¡for (var name in headers) {

¡¡¡¡ajax.transport.setRequestHeader(name, headers[name]);

¡¡¡¡}

¡¡¡¡},

¡¡¡¡evalJSON: function() {

¡¡¡¡try {

¡¡¡¡return eval('(' + ajax.transport.responseText + ')');

¡¡¡¡} catch (e) {}

¡¡¡¡}

¡¡¡¡};

¡¡¡¡var Form = {

¡¡¡¡serialize: function(element) {

¡¡¡¡var elements = $(element).all;

¡¡¡¡var queryComponents = [];

¡¡¡¡for(var i = 0; i < elements.length; i++) {

¡¡¡¡var parameter = null, method = elements[i].tagName.toLowerCase();

¡¡¡¡if(['input', 'select', 'textarea'].include(method)) {

¡¡¡¡parameter = Form.Serializers[method](elements[i]);

¡¡¡¡}

¡¡¡¡if(parameter != null && parameter.constructor == Array) {

¡¡¡¡var key = encodeURIComponent(parameter[0]);

¡¡¡¡var value = encodeURIComponent(parameter[1]);

¡¡¡¡queryComponents.push(key + '=' + value);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return queryComponents.join('&');

¡¡¡¡},

¡¡¡¡request: function(options) {

¡¡¡¡var params = this.toQueryParams(options.parameters);

¡¡¡¡options.parameters = this.serialize(this.form);

¡¡¡¡if(params) {

¡¡¡¡options.parameters = options.parameters.concat('&' + params);

¡¡¡¡}

¡¡¡¡if($(this.form).method) {

¡¡¡¡options.method = $(this.form).method;

¡¡¡¡}

¡¡¡¡return new ajax.request($(this.form).action, options);

¡¡¡¡},

¡¡¡¡toQueryParams: function(params) {

¡¡¡¡var queryComponents = [];

¡¡¡¡if (params && typeof params == 'string') {

¡¡¡¡queryComponents.push(encodeURIComponent(params));

¡¡¡¡} else if (params && typeof params == 'object') {

¡¡¡¡for(var param in params) {

¡¡¡¡var key = encodeURIComponent(param);

¡¡¡¡var value = encodeURIComponent(params[param]);

¡¡¡¡queryComponents.push(key + '=' + value);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return queryComponents.join('&');

¡¡¡¡}

¡¡¡¡};

¡¡¡¡Form.Serializers = {

¡¡¡¡input: function(element) {

¡¡¡¡switch(element.type.toLowerCase()) {

¡¡¡¡case 'checkbox':

¡¡¡¡case 'radio':

¡¡¡¡return this.inputSelector(element);

¡¡¡¡default:

¡¡¡¡return this.textarea(element);

¡¡¡¡}

¡¡¡¡},

¡¡¡¡inputSelector: function(element) {

¡¡¡¡if(element.checked) {

¡¡¡¡return [element.name, element.value];

¡¡¡¡}

¡¡¡¡},

¡¡¡¡textarea: function(element) {

¡¡¡¡return [element.name, element.value];

¡¡¡¡},

¡¡¡¡select: function(element) {

¡¡¡¡return this[element.type == 'select-one' ?

¡¡¡¡'selectOne' : 'selectMany'](element);

¡¡¡¡},

¡¡¡¡selectOne: function(element) {

¡¡¡¡var value = null, option, index = element.selectedIndex;

¡¡¡¡if(index >= 0) {

¡¡¡¡option = element.options[index];

¡¡¡¡value = option.value == (undefined || '') ? option.text : option.value;

¡¡¡¡}

¡¡¡¡return [element.name, value];

¡¡¡¡},

¡¡¡¡selectMany: function(element) {

¡¡¡¡var value = [];

¡¡¡¡for(var i = 0; i < element.length; i++) {

¡¡¡¡var option = element.options[i];

¡¡¡¡if(option.selected) {

¡¡¡¡var optvalue = option.value == (undefined || '') ? option.text : option.value;

¡¡¡¡value.push(optvalue);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡return [element.name, value];

¡¡¡¡}

¡¡¡¡};

¡¡¡¡function $F(element) {

¡¡¡¡this.form = element;

¡¡¡¡}

¡¡¡¡Object.extend($F.prototype, Form);

¡¡¡¡/**************************************************************

¡¡¡¡* ²âÊÔº¯Êý

¡¡¡¡*/

¡¡¡¡function onTest() {

¡¡¡¡//getÌá½»·½·¨

¡¡¡¡var params = new Object();

¡¡¡¡params.ss = 'ÕÅÈý';

¡¡¡¡new ajax.request('ajax.do?method=doGet', {

¡¡¡¡onSuccess: function(transport) {

¡¡¡¡alert(transport.evalJSON().xx)

¡¡¡¡},

¡¡¡¡parameters: params

¡¡¡¡});

¡¡¡¡//post formÌá½»·½·¨

¡¡¡¡var params = new Object();

¡¡¡¡params.idd = 1000;

¡¡¡¡params.names = 'ÕÅÈý'

¡¡¡¡new $F('form').request({

¡¡¡¡onSuccess: function(transport) {

¡¡¡¡alert(transport.evalJSON().xx);

¡¡¡¡},

¡¡¡¡parameters: params

¡¡¡¡});

¡¡¡¡}