Easy.Ajax ²¿·ÖÔ´´úÂë Ö§³ÖÎļþÉÏ´«¹¦ÄÜ£¬ ¼æÈÝËùÓÐÖ÷Á÷ä¯ÀÀÆ÷

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

¡¡¡¡Easy.Ajax = {

¡¡¡¡proxyPool: {

¡¡¡¡length: function () {

¡¡¡¡var i = 0;

¡¡¡¡for (var p in this)

¡¡¡¡i++;

¡¡¡¡return i - 1;

¡¡¡¡}

¡¡¡¡},

¡¡¡¡index: 0,

¡¡¡¡async: true,

¡¡¡¡xmlData: false,

¡¡¡¡timeout: 1,

¡¡¡¡defaultHeader: 'application/json; charset=utf-8',

¡¡¡¡clearCache: true,

¡¡¡¡emptyFn: function () {

¡¡¡¡},

¡¡¡¡defaultHandlers: {

¡¡¡¡empty: function () { },

¡¡¡¡onerror: this.empty,

¡¡¡¡onload: this.empty,

¡¡¡¡ontimeout: this.empty,

¡¡¡¡onprogress: this.empty

¡¡¡¡},

¡¡¡¡createXhr: function (id) {

¡¡¡¡var py, pxy;

¡¡¡¡try {

¡¡¡¡var md = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];

¡¡¡¡try {

¡¡¡¡pxy = new XMLHttpRequest();

¡¡¡¡} catch (e) {

¡¡¡¡}

¡¡¡¡if (!pxy && window.XDomainRequest)

¡¡¡¡pxy = new XDomainRequest();

¡¡¡¡for (var i = 0; !pxy; i++)

¡¡¡¡try {

¡¡¡¡pxy = new ActiveXObject(md[i]);

¡¡¡¡} catch (e) {

¡¡¡¡}

¡¡¡¡py = {

¡¡¡¡conn: pxy,

¡¡¡¡isLoading: false,

¡¡¡¡id: id

¡¡¡¡};

¡¡¡¡this.proxyPool[id] = py;

¡¡¡¡} catch (e) {

¡¡¡¡return new Easy.Error(e, e.message);

¡¡¡¡} finally {

¡¡¡¡return pxy ? py : new Easy.Error('Null pointer');

¡¡¡¡}

¡¡¡¡},

¡¡¡¡setEvents: function (pxy, cfg, override) {

¡¡¡¡try {

¡¡¡¡var dh = this.defaultHandlers, props = cfg, conn = pxy.conn, me = this;

¡¡¡¡for (var p in dh) {

¡¡¡¡if (!override && conn.hasOwnProperty(p))

¡¡¡¡continue;

¡¡¡¡try {

¡¡¡¡conn[p] = props[p] || dh[p];

¡¡¡¡} catch (e) {

¡¡¡¡}

¡¡¡¡}

¡¡¡¡conn.onreadystatechange = function () {

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

¡¡¡¡pxy.isLoading = false;

¡¡¡¡(cfg.callback || me.callback).call(conn, conn.responseText

¡¡¡¡|| conn.responseXML.xml, cfg);

¡¡¡¡me.destroy(pxy.id);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡} catch (e) {

¡¡¡¡} finally {

¡¡¡¡return conn;

¡¡¡¡}

¡¡¡¡},

¡¡¡¡callback: function (rsp, cfg) {

¡¡¡¡var emptyFn = function () {

¡¡¡¡};

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

¡¡¡¡(cfg.success || emptyFn).call(this, rsp);

¡¡¡¡} else {

¡¡¡¡(cfg.failure || emptyFn).call(this, rsp, this.statue);

¡¡¡¡}

¡¡¡¡},

¡¡¡¡getParam: function (pms) {

¡¡¡¡return Easy.util.join(pms, "&");

¡¡¡¡},

¡¡¡¡open: function (method, url, async, cfg, uname, pwd) {

¡¡¡¡var me = this, pxy = this.createXhr(this.index++);

¡¡¡¡var conn = pxy.conn;

¡¡¡¡conn.open(method, url, async);

¡¡¡¡conn.setRequestHeader("Content-Type", cfg.xmlData || this.xmlData

¡¡¡¡? "text/xml"

¡¡¡¡: this.defaultHeader);

¡¡¡¡conn.setRequestHeader("timeout", this.timeout);

¡¡¡¡return pxy;

¡¡¡¡},

¡¡¡¡toRequstCfg: function (cfg) {

¡¡¡¡if (Easy.getType(cfg) == "string")

¡¡¡¡cfg = {

¡¡¡¡url: cfg

¡¡¡¡};

¡¡¡¡cfg.url = Easy.util.urlAppend(cfg.url, Math.random(5))

¡¡¡¡var form = Easy.DOM.get(cfg.form);

¡¡¡¡if (form) {

¡¡¡¡if (cfg.isUpload || /multipart\/form-data/i.test(form.getAttribute("enctype")))

¡¡¡¡cfg.isUpload = true;

¡¡¡¡else

¡¡¡¡cfg.params = Easy.util.serializeForm(form);

¡¡¡¡}

¡¡¡¡return cfg;

¡¡¡¡},

¡¡¡¡request: function (cfg, method) {

¡¡¡¡var pxy = this.open(method || "POST", cfg.url, true, cfg), proxy = pxy.conn;

¡¡¡¡proxy = this.setEvents(pxy, cfg, true);

¡¡¡¡var params = this.getParam(cfg.params), bl = cfg.beforeLoad;

¡¡¡¡if (bl && Easy.getType(bl) == "function" && bl.call(proxy) === false)

¡¡¡¡return;

¡¡¡¡proxy.send(params);

¡¡¡¡pxy.isLoading = true;

¡¡¡¡return pxy.id;

¡¡¡¡},

¡¡¡¡get: function (cfg) {

¡¡¡¡cfg = this.toRequstCfg(cfg);

¡¡¡¡if (cfg.isUpload)

¡¡¡¡return this.upload(cfg);

¡¡¡¡return this.request(cfg, "GET");

¡¡¡¡},

¡¡¡¡post: function (cfg) {

¡¡¡¡cfg = this.toRequstCfg(cfg);

¡¡¡¡if (cfg.isUpload)

¡¡¡¡return this.upload(cfg);

¡¡¡¡return this.request(cfg);

¡¡¡¡},

¡¡¡¡upload: function (cfg) {

¡¡¡¡var form = Easy.DOM.get(cfg.form);

¡¡¡¡var iframe = document.createElement("iframe");

¡¡¡¡var iframeID = "Easy_Ajax_Form_Submit";

¡¡¡¡Easy.DOM.setAttributes(iframe, {

¡¡¡¡id: iframeID,

¡¡¡¡name: iframeID,

¡¡¡¡width: "0px",

¡¡¡¡height: "0px",

¡¡¡¡style: "display:none;",

¡¡¡¡src: "about:blank"

¡¡¡¡});

¡¡¡¡Easy.DOM.render(iframe, form);

¡¡¡¡if (Easy.util.isIE)

¡¡¡¡document.frames[iframeID].name = iframeID;

¡¡¡¡var complete = function () {

¡¡¡¡Easy.DOM.destroy(iframe);

¡¡¡¡};

¡¡¡¡cfg.url = cfg.url || form.action;

¡¡¡¡Easy.DOM.setAttributes(form, {

¡¡¡¡action: Easy.util.urlAppend(cfg.url, cfg.params),

¡¡¡¡target: iframeID,

¡¡¡¡enctype: "multipart/form-data",

¡¡¡¡method: "POST"

¡¡¡¡});

¡¡¡¡var cb = function () {

¡¡¡¡try {

¡¡¡¡var me = this, r =

¡¡¡¡{

¡¡¡¡responseText: '', responseXML: null

¡¡¡¡},

¡¡¡¡doc,

¡¡¡¡firstChild;

¡¡¡¡try {

¡¡¡¡doc = iframe.contentWindow.document || iframe.contentDocument || window.frames[id].document;

¡¡¡¡if (doc) {

¡¡¡¡if (doc.body) {

¡¡¡¡if (/textarea/i.test((firstChild = doc.body.firstChild || {}).tagName)) {

¡¡¡¡r.responseText = firstChild.value;

¡¡¡¡}

¡¡¡¡else {

¡¡¡¡r.responseText = doc.body.innerHTML;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡r.responseXML = r.responseText;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡catch (e) {

¡¡¡¡}

¡¡¡¡(cfg.callback || cfg.success || complete).call(r, r.responseText ||

¡¡¡¡r.responseXML.xml, cfg);

¡¡¡¡} catch (e) {

¡¡¡¡(cfg.failure || cfg.callback || complete).call(r, e.message, cfg);

¡¡¡¡}

¡¡¡¡};

¡¡¡¡Easy.DOM.on(iframe, "load", cb, iframe);

¡¡¡¡form.submit();

¡¡¡¡},

¡¡¡¡destroy: function (id) {

¡¡¡¡this.abort(id);

¡¡¡¡delete this.proxyPool[id];

¡¡¡¡},

¡¡¡¡abort: function (id) {

¡¡¡¡if (!Easy.util.isIE6)

¡¡¡¡(((this.proxyPool[id] || {}).conn.abort) || this.emptyFn)();

¡¡¡¡}

¡¡¡¡};