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)(); 
} 
}; 
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所
内容版权声明:除非注明,否则皆为本站原创文章。
