由于老版本的ajax存在以下問題揭鳞,從而導(dǎo)致了ajax2的出現(xiàn)
- 只支持文本數(shù)據(jù)的傳送,無法用來讀取和上傳二進(jìn)制文件梆奈。
- 傳送和接收數(shù)據(jù)時野崇,沒有進(jìn)度信息,只能提示有沒有完成亩钟。
- 受到"同域限制"(Same Origin Policy)乓梨,只能向同一域名的服務(wù)器請求數(shù)據(jù)。
ajax2的新特性有以下幾個
- 可以設(shè)置HTTP請求的時限径荔。
- 可以使用FormData對象管理表單數(shù)據(jù)督禽。
- 可以上傳文件。
- 可以請求不同域名下的數(shù)據(jù)(跨域請求)总处。
- 可以獲取服務(wù)器端的二進(jìn)制數(shù)據(jù)狈惫。
- 可以獲得數(shù)據(jù)傳輸?shù)倪M(jìn)度信息。
下面是利用H5的FromData鹦马,ajax異步傳輸文件和表單的代碼示例
var oMyForm = new FormData();
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456);
// 數(shù)字123456被立即轉(zhuǎn)換成字符串"123456"
// fileInputElement中已經(jīng)包含了用戶所選擇的文件
oMyForm.append("userfile", fileInputElement.files[0]);
var oFileBody = "<a id="a"><b id="b">hey!</b></a>";
// Blob對象包含的文件內(nèi)容
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事件胧谈,還有其他與之相關(guān)的五個事件,可以查看進(jìn)度信息荸频,請求時限
progress事件:正在傳輸事件菱肖。
load事件:傳輸成功完成。
abort事件:傳輸被用戶取消旭从。
error事件:傳輸中出現(xiàn)錯誤稳强。
loadstart事件:傳輸開始。
loadEnd事件:傳輸結(jié)束和悦,但是不知道成功還是失敗退疫。
注意:下載的progress事件屬于XMLHttpRequest對象,上傳的progress事件屬于XMLHttpRequest.upload對象鸽素。
關(guān)于ajax的JQ用法和其他詳細(xì)用法見附錄褒繁。
附錄:
XMLHttpRequest Level 2 使用指南
通過jQuery Ajax使用FormData對象上傳文件
Web 前沿——HTML5 Form Data 對象的使用