Ajax通信與數(shù)據(jù)格式無關(guān),從服務(wù)器獲取的數(shù)據(jù)不一定是XML數(shù)據(jù)。
Ajax的核心:XMLHttpRequest對象(簡稱XHR)
在XHR對象之前,Ajax通信通常使用hack手段,如使用隱藏的或內(nèi)嵌的框架。
XHR對象為向服務(wù)器發(fā)送信息和解析服務(wù)器響應(yīng)提供了流暢的接口。
1.XMLHttpRequest對象
IE5是第一款引進XHR對象的瀏覽器,通過MSXML庫中的ActiveX對象實現(xiàn)(有3個版本)。
兼容所有瀏覽器,創(chuàng)建XHR對象:
function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], i, len; for (i=0,len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); } else { throw new Error("No XHR object available."); }}之后就能在所有瀏覽器創(chuàng)建XHR對象:var xhr = createrXHR();
2.原生XHR對象 (支持的瀏覽器: IE7+、FF、Chrome、Opera、Safari)
通過XMLHttpRequest構(gòu)建函數(shù),創(chuàng)建XHR對象:
var xhr = new XMLHttpRequest();
3.XHR用法
3-1.open()
open() 3個參數(shù): 發(fā)送的類型、請求的URL、表是否異步的布爾值
xhr.open("get","example.php", false);①URl為相對于執(zhí)行代碼的當前頁,或絕對地址;
②false為同步,JavaScript代碼會在服務(wù)器響應(yīng)后再繼續(xù)執(zhí)行;
③調(diào)用open()只是啟動一個請求以備發(fā)送,還沒真正發(fā)送;
④只能在同個域中使用相同端口和協(xié)議的URL發(fā)送請求。
3-2.send()
send() 1個參數(shù): 請求主體發(fā)送的數(shù)據(jù),不需要通過請求主體發(fā)送數(shù)據(jù)則傳入null。
調(diào)用send()后,請求被分派到服務(wù)器。
xhr.open("get","example.php", false) ;xhr.send(null);3-3. 收到響應(yīng)后,響應(yīng)數(shù)據(jù)會自動填充XHR對象的屬性:
responseText:作為響應(yīng)的主體被返回的文本;
responseXML:若響應(yīng)的內(nèi)容類型”text/xml”或”application/xml”,此屬性保存響應(yīng)數(shù)據(jù)XML DOM文檔
status:響應(yīng)的HTTP狀態(tài);
statusText:HTTP狀態(tài)的說明。
☆:無論什么內(nèi)容類型,響應(yīng)主體的內(nèi)容都會保存在responseText屬性中。對于非XML數(shù)據(jù),responseXML屬性值為null。
3-4.status屬性確認響應(yīng)是否成功返回
HTTP狀態(tài)代碼:
200:響應(yīng)有效,responseText屬性已就緒,內(nèi)容類型正確下的responseXML也可訪問。
304:響應(yīng)有效,只是請求的資源并為修改,可直接使用瀏覽器中緩存的版本。
新聞熱點
疑難解答
圖片精選