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

下面是Easy.Ajax类的初稿,如须发表,在代码上还要修改以达到最简,但API是不会变了,

 

Easy.Ajax = (function (WINDOW) {
ajax = {
proxyPool: {
length: function () {
var i = 0;
for (var p in this)
i++;
return i - 1;
}
},
index: 0,
clearCache: true,
contentType: "application/x-www-form-urlencoded; charset=utf-8",
timeout: 10000,
async: true,
xmlData: false,
createXhr: function (id) {
var py, pxy;
try {
try {
pxy = new XMLHttpRequest();
} catch (e) {
}
var md = ['Msxml2.XMLHTTP.4.0', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP'];
for (var i = 0; !pxy && i < md.length; 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');
}
},
getParam: function (pms) {
return Easy.util.join(pms, "&");
},
callback: function (rsp, cfg) {
if (this.status == 200) {
(cfg.success || Easy.emptyFn).call(this, rsp);
} else {
(cfg.failure || Easy.emptyFn).call(this, rsp, this.statue);
}
},
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, uname, pwd);
conn.setRequestHeader("Content-Type", cfg.xmlData || this.xmlData
? "text/xml"
: this.contentType);
conn.setRequestHeader("timeout", cfg.timeout || this.timeout);
try {
conn.setRequestHeader("X-Requested-With", "XMLHttpRequest");
} catch (e) {
}
try {
conn.onreadystatechange = function () {
if (conn.readyState == 4) {
pxy.isLoading = false;
(cfg.callback || me.callback).call(conn, conn.responseText
|| conn.responseXML, cfg);
Easy.delay(me.destroy, 10, pxy, pxy.id);
}
}
conn.ontimeout = cfg.ontimeout || dh.ontimeout;
} catch (e) { }
return pxy;
},
toRequstCfg: function (cfg) {
if (Easy.isString(cfg))
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) {
if (cfg.isUpload && cfg.form)
return this.upload(cfg);
var pxy = this.open(method || "POST", cfg.url, true, cfg), proxy = pxy.conn;
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);
return this.request(cfg, "GET");
},
post: function (cfg) {
cfg = this.toRequstCfg(cfg);
return this.request(cfg);
},
upload: function (cfg) {
if (!form) {
form = Easy.DOM.create({
tag: 'form',
id: "Easy_Ajax_Form"
}, Easy.getBody());
formCreated = true;
}
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.isIE6 || Easy.isIE7)
document.frames[iframeID].name = iframeID;
var complete = function () {
Easy.DOM.destroy(iframe);
if (formCreated)
Easy.DOM.destroy(form);
};
cfg.url = cfg.url || form.action;
Easy.DOM.setAttributes(form, {
action: Easy.util.urlAppend(cfg.url, cfg.params),
target: iframeID,
enctype: "multipart/form-data",
encoding : "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, 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) {
var ajax = Easy.Ajax
ajax.abort.call(ajax, id);
delete ajax.proxyPool[id];
},
abort: function (id) {
if (!Easy.isIE6)
try { (this.proxyPool[id] || { conn: {} }).conn.abort(); } catch (e) { }
}
}
return ajax;
})(window);

 

转载于:https://www.cnblogs.com/Easyjs/archive/2011/02/24/ajax.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8中Lambda表达式的阴暗面

这篇文章可能不会使我成为任何新朋友。 哦&#xff0c;好吧&#xff0c;无论如何我从来没有真正在学校受到欢迎。 但是&#xff0c;让我们说清楚。 就语言而言&#xff0c;Java 8的最大特色无疑是Lambda表达式。 几年来&#xff0c;它一直是功能语言&#xff08;例如Scala和Clo…

复旦大学长跑协会财务制度(初稿)

(一)活动资金来源及主要支出 1、资金主要来源&#xff1a;会费、学校的拨款&#xff0c;私人捐助、企业赞助等。 2、活动性支出&#xff1a;活动宣传、场地租用费、租借多媒体仪器费用及活动经费。事物性支出&#xff1a;协会运作所需物资(如文具等硬件)。 (二)财务报销原则 1、…

JQ实现弹幕效果

JQ实现弹幕效果&#xff0c;快来吐糟你的想法吧 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>JQ实现弹幕效果</title><style type"t…

Iterator作用

前言 下面的内容是我从百度知道拷贝出来的&#xff0c;也就不在贴出链接了。我总结下就是迭代器在集合中使用&#xff0c;用户不需要关心具体集合实现的是如何遍历&#xff08;不暴露细节&#xff09;&#xff0c;按照迭代器的方式遍历。 作用 Iterator模式是用于遍历集合类的标…

Django:URL映射

导航 跳转&#xff1a;视图简介 跳转&#xff1a;URL映射 跳转&#xff1a;一、URL中添加参数 跳转&#xff1a;二、指定默认的参数 跳转&#xff1a;三、URL中包含另一个urls模块 跳转&#xff1a;  include函数 跳转&#xff1a;四、path函数 跳转&#xff1a;  自定义ur…

php-v 查看不到版本,解決php -v查看到版本於phpinfo()打印的版本不一致問題

整個事件的起因是這樣的通過git拉取laraevl項目發現缺少.env文件&#xff0c;打算使用composer install生成一個.env文件&#xff0c;然后提示composer最低使用php版本7.1.3而檢測到我的版本為5.4.16。提示如下&#xff1a;然后使用phpinfo打印一下發現版本是7.2.6。打印結果如…

将jOOQ与Spring结合使用:排序和分页

JOOQ是一个库&#xff0c;可以帮助我们控制SQL。 它可以从我们的数据库生成代码&#xff0c;并允许我们使用其流畅的API来构建类型安全的数据库查询。 本教程前面的部分向我们介绍了如何配置应用程序的应用程序上下文&#xff0c;如何从数据库生成代码以及如何将CRUD操作添加到…

获取表的所有列名

selectname fromsyscolumns whereidobject_id(表名)下面这样也可以:selectcolumn_name frominformation_schema.columns wheretable_name news转载于:https://www.cnblogs.com/zhuboxingzbx/archive/2007/09/03/880049.html

天下武功唯快不破------实验吧

题目地址&#xff1a;http://www.shiyanbar.com/ctf/1854 打开链接 全是英文&#xff0c;能力有限&#xff0c;翻译一下&#xff0c;好像没其他东西了&#xff0c;查看一下源码 让用post请求&#xff0c;丢到burp改一下 看到response有一个FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GT…

JS实现文本中查找并替换字符

JS实现文本中查找并替换字符 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html><html> <head><style type"text/css">*{font-family:"微软雅黑";font-size:16px;margin:0;padding:0;letter-spaci…

数据依赖的公理系统

ArmStrong公理系统 学习数据依赖的公理系统是进行模式分解的算法的理论基础。而Armstrong公理系统是一个具有有效性和完备性的公理系统。 U是属性总体&#xff0c;F是函数依赖&#xff0c;对于R<U,F>推理规则如下&#xff1a; A1 自反律 &#xff1a;若Y⊆X⊆U&#xff0…

在没有IDE的情况下编译和运行Java

最近一个名为“ 不使用IDE编译Java软件包 ”的Java subreddit线程提出了一个问题&#xff1a;“是否有一个命令将软件包内的一组Java文件编译到一个单独的文件夹中&#xff08;以下简称为bin&#xff09;&#xff0c;以及如何我会去运行新的类文件吗&#xff1f;” 该帖子的作者…

java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement

无返回值函数对于返回类型是void的函数&#xff0c;return后不跟表达式。最后的 return; 可以没有而让程序隐式执行。在void函数中的return语句还有提前使函数退出的作用而不进行接下来的计算&#xff0c;如定义一个swap函数在二者相同时不继续运算直接退出&#xff1a;void sw…

异步调用 (转载)

异步操作通常用于执行完成时间可能较长的任务&#xff0c;如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时&#xff0c;应用程序可在异步方法执行其任务时继续执行。.NET框架能够对任何方法进行异步…

《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器

众所周知&#xff0c;要想能获取一个类的实例&#xff0c;该类得要提供一个public的构造器。但是《Effective Java》书中说还有一个方法&#xff0c;那就是提供静态工厂方法&#xff08;static factory method&#xff09;&#xff0c;该方法时静态&#xff0c;同时可以根据参数…

[转]MySQL 表锁和行锁机制

本文转自&#xff1a;http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁&#xff0c;是福还是坑&#xff1f;如果你不清楚MySQL加锁的原理&#xff0c;你会被它整的很惨&#xff01;不知坑在何方&#xff1f;没事&#xff0c;我来给你们标记几个…

使用JS实现文字搬运工

使用JS实现文字搬运工 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>使用JS实现文字搬运工&…

ActiveMQ –经纪人网络解释–第3部分

现在&#xff0c;我们已经在本博客系列的第1部分和第2 部分中了解了ActiveMQ网络连接器的基础&#xff0c;在第3部分中&#xff0c;我们将研究ActiveMQ如何平衡连接到代理网络的使用者。 介绍 当可以无序处理队列中的消息时通常使用并发使用者&#xff0c;通常可以提高消息吞吐…

PJMEDIA之录音器的使用(capture sound to avi file)

为了熟悉pjmedia的相关函数以及使用方法&#xff0c;这里练习了官网上的一个录音器的例子。 核心函数&#xff1a; pj_status_t pjmedia_wav_writer_port_create(pj_pool_t * pool, const char * filename, unsigned clock_rate, unsigned channel_count, unsigned samples…

2007年暑期总结

又是一个没有回家的假期&#xff0c;一个月的鸡蛋炒拉面&#xff0c;一个月沉浸在编程的世界里……收获早已超越了技术本身&#xff0c;项目的实践&#xff0c;系统的架构&#xff0c;……更多的&#xff0c;是朋友们在一起的乐趣。A5闹鬼记&#xff0c;回去洗洗就睡了&#xf…