1. 程式人生 > >AJAX(四):XHR2支持的方法

AJAX(四):XHR2支持的方法

信息 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支持的方法