AJAX(四):XHR2支持的方法
阿新 • • 發佈:2018-03-17
信息 table res 異步 如何 fun col style 一個表
XMLHttpRequest 1級只是把已有的XHR對象的實現細節描述了出來。而XMLHttpRequest 2級則進一步發展了XHR
FormData
FormData為序列化表單以及創建與表單格式相同的數據(用於通過XHR傳輸)提供了便利
//通過append方法增加信息 append()方法接收兩個參數:健和值 var data = new FormData(); data.append(‘name‘, ‘Nicholas‘);
//通過FormData構造函數傳入表單元素 var data = new FormData(document.form[0]) xhr.open(‘post‘, ‘postexample‘, true); var form = document.getElementById(‘user-info‘); xhr.send(new FormData(form));
使用FormData的方便之處體現在不必明確地在XHR對象上設置請求頭部。XHR對象能夠識別傳入的數據類型是FormData的實例,並配置適當的頭部信息
overrideMimeType()方法
用於重寫XHR響應的MIME類型,因為返回響應的MIME類型決定了XHR對象如何處理它,所以提供一種方法能夠重寫服務器返回的MIME
類型是很有用的
var xhr = createXHR(); xhr.open(‘get‘, ‘text.php‘, true); xhr.overrideMimeType(‘text/xml‘); xhr.send(null);
進度事件
1)load事件。最終,Firefox在簡化異步交互模型中實現了load事件,用以替代readystatechange事件。響應接收完畢後將觸發load事件,因此也就沒有必要去檢查readyState屬性了
var xhr = createXHR(); xhr.onload = function(){ if((xhr.status >=200 && xhr.status < 300 ) || xhr.status == 304 ){ alert(xhr.responseText); }else{ alert("Request was unsuccessful : " + xhr.status); } } xhr.open(‘get‘, ‘altevents.php‘, true); xhr.send(null);
只要瀏覽器接收到服務器的響應,不管其狀態如何,都會觸發load事件,但必須要檢查status屬性,才能確定是否真的已經可用了,firefox,opera,chrome,safari都支持load事件
2)progress事件
這個事件會在瀏覽器接收到新數據期間周期性地觸發,而progress事件會接收到一個event對象,其target屬性是xhr對象,但包含著三個額外的屬性:
lengthComputable:是一個表示進度信息是否可用的布爾值
position:表示意境接收的字節數
totalSize:表示根據content-length響應頭部確定預期字節數。
eg:
var xhr = createXHR(); xhr.onload = function(){ if((xhr.status >=200 && xhr.status < 300 ) || xhr.status == 304 ){ alert(xhr.responseText); }else{ alert("Request was unsuccessful : " + xhr.status); } } xhr.onprogress = function(){ var divStatus = document.getElementById(‘status‘); if(event.lengthComputable){ divStatus.innerHTML = ‘Received‘ + event.position + ‘of‘ + event.totalSize + ‘ bytes‘ } } xhr.open(‘get‘, ‘altevents.php‘, true); xhr.send(null);
為確保正常執行,必須在調用open()前添加onprogress事件
AJAX(四):XHR2支持的方法