一、xhr超時(shí)
XHR對(duì)象的timeout屬性等于一個(gè)整數(shù)灿意,表示多少毫秒后估灿,如果請(qǐng)求仍然沒(méi)有得到結(jié)果,就會(huì)自動(dòng)終止缤剧。該屬性默認(rèn)等于0馅袁,表示沒(méi)有時(shí)間限制。
如果請(qǐng)求超時(shí)荒辕,將觸發(fā)ontimeout事件(IE8不支持)
var xhr = new XMLHttpRequest();
xhr.open('post','test.php',true);
xhr.ontimeout = function(){
console.log('The request timed out.');
}
xhr.timeout = 1000;
xhr.send();
二汗销、跨域請(qǐng)求
xhr.withCredentials = true;
xhr.setRequestHeader('X-Request-With', "XMLHttpRequest");
只有客戶端設(shè)置這個(gè)值還不能跨域,還需要服務(wù)端同意才行抵窒。
Access-Control-Allow-Credentials: true;
還有一點(diǎn)要注意的弛针,返回頭Access-Control-Allow-Origin的值不能為星號(hào),必須是指定的域估脆,否則cookie等認(rèn)證信息也是發(fā)送不了钦奋。
三、優(yōu)化
使用AJAX接收數(shù)據(jù)時(shí)疙赠,由于網(wǎng)絡(luò)和數(shù)據(jù)大小的原因付材,并不是立刻就可以在頁(yè)面中顯示出來(lái)。所以圃阳,更好的做法是厌衔,在接受數(shù)據(jù)的過(guò)程中,顯示一個(gè)類似loading的小圖片捍岳,并且禁用按鈕富寿;當(dāng)數(shù)據(jù)完全接收后睬隶,再隱藏該圖片,并啟用按鈕
四页徐、其他
1.停止當(dāng)前請(qǐng)求
xhr.abort();
2.把HTTP請(qǐng)求的所有響應(yīng)首部作為鍵/值對(duì)返回
xhr.getAllResponseHeaders();
3.返回指定首部的串值
xhr.getResponseHeader("header");
4.把指定首部設(shè)置為所提供的值
xhr.setRequestHeader("header", "value");//在設(shè)置任何首部之前必須先調(diào)用open()苏潜。設(shè)置header并和請(qǐng)求一起發(fā)送 ('post'方法一定要 )
5.監(jiān)聽(tīng)文件上傳進(jìn)度
xhr.upload.addEventListener("progress", function(e){...}, false);