Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下:Easy.Ajax={proxyPool:{length:function(){vari=0;for(varpinthis...

复制代码 代码如下:

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

}

};

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类