¡¡¡¡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)();
¡¡¡¡}
¡¡¡¡};