由于老版本的ajax存在以下问题,从而导致了ajax2的出现
- 只支持文本数据的传送,无法用来读取和上传二进制文件。
- 传送和接收数据时,没有进度信息,只能提示有没有完成。
- 受到"同域限制"(Same Origin Policy),只能向同一域名的服务器请求数据。
ajax2的新特性有以下几个
- 可以设置HTTP请求的时限。
- 可以使用FormData对象管理表单数据。
- 可以上传文件。
- 可以请求不同域名下的数据(跨域请求)。
- 可以获取服务器端的二进制数据。
- 可以获得数据传输的进度信息。
下面是利用H5的FromData,ajax异步传输文件和表单的代码示例
var oMyForm = new FormData();
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456);
// 数字123456被立即转换成字符串"123456"
// fileInputElement中已经包含了用户所选择的文件
oMyForm.append("userfile", fileInputElement.files[0]);
var oFileBody = "<a id="a"><b id="b">hey!</b></a>";
// Blob对象包含的文件内容
var oBlob = new Blob([oFileBody], { type: "text/xml"});
oMyForm.append("webmasterfile", oBlob);
var oReq = new XMLHttpRequest();
oReq.open("POST", "[http://foo.com/submitform.php](http://foo.com/submitform.php)");
oReq.send(oMyForm);
新版本的ajax还增加了progress事件,还有其他与之相关的五个事件,可以查看进度信息,请求时限
progress事件:正在传输事件。
load事件:传输成功完成。
abort事件:传输被用户取消。
error事件:传输中出现错误。
loadstart事件:传输开始。
loadEnd事件:传输结束,但是不知道成功还是失败。
注意:下载的progress事件属于XMLHttpRequest对象,上传的progress事件属于XMLHttpRequest.upload对象。
关于ajax的JQ用法和其他详细用法见附录。
附录:
XMLHttpRequest Level 2 使用指南
通过jQuery Ajax使用FormData对象上传文件
Web 前沿——HTML5 Form Data 对象的使用