Heim > Web-Frontend > js-Tutorial > Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器_javascript技巧

Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器_javascript技巧

WBOY
Freigeben: 2016-05-16 18:10:25
Original
806 Leute haben es durchsucht
复制代码 代码如下:

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)();
}
};
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage