當咱們聲明瞭一個XMLHttpRequest對象的實例的時候,使用for-in來循環遍歷一下這個實例(本文使用的是chrome45版本瀏覽器),咱們會發如今這個實例上綁定了一些內容,我把這些內容進行了一下分類:javascript
下面對這五個分類的前四個已經裏面的內容進行一個詳細的記錄~(有人可能會問,不是上面分了五個分類嗎,可素第五個分類就那5個不可改變的值,也沒有什麼好說的+_+)
1、配置項
① timeout
timeout是用來設置超時時間的,默認的值是0,也就是說沒有超時限制,無論請求多久都不會觸發超時。能夠給他設置一個類型爲數字的值,表明多少毫秒以後若是沒有收到響應就觸發超時事件(ontimeout)。
② withCredentials
這個值是來配置是否在發送的時候攜帶着憑據,默認值是false,也就是默認不攜帶。所謂的憑據指的就是cookie、HTTP認證及客戶端SSL證實等信息。這個是在CORS跨域的時候與服務器的Access-Control-Allow-Credentials進行配合使用的,若是發送了攜帶憑據的請求,可是服務器的響應裏面沒有Access-Control-Allow-Credentials是true這個值的頭,那麼瀏覽器就會因爲同源限制把響應給屏蔽掉,而且調用xhr的oerror事件。
例若有下面這一段代碼:php
var xhr=new XMLHttpRequest(); xhr.withCredentials=true; xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200){ console.log("success!"); } } } xhr.onerror=function(e){ console.log("error!"); } xhr.open("GET","http://127.0.0.1/withCredentials.php"); xhr.send(null);
若是在服務端的代碼試下嘛這樣子的:
header("Access-Control-Allow-Origin: *"); echo "ok";
XMLHttpRequest cannot load http://127.0.0.1/withCredentials.php. Credentials flag is "true", but the "Access-Control-Allow-Credentials" header is "". It must be "true" to allow credentials. Origin "http://192.168.1.106" is therefore not allowed access.
header("Access-Control-Allow-Origin: http://192.168.1.106"); header("Access-Control-Allow-Credentials: true"); echo "ok";
if(xhr.readyState==4){ if(xhr.status>=200&&xhr.status<300 ||="" xhr.status="=304){" console.log(xhr.response);="" }="" }<="" code=""></300>
③ statusText
var xhr = new XMLHttpRequest(); var onProgressHandler = function(event) { if(event.lengthComputable) { console.log((event.loaded / event.total) * 100); } else { console.log("Can"t determine the size of the file."); } } xhr.upload.addEventListener("progress", onProgressHandler, false); xhr.open("POST","http://iwenku.net"); xhr.send(data);
3、方法項
var xhr=new XMLHttpRequest(); xhr.open("GET","http://127.0.0.1/openTest.php"); xhr.send(null); xhr.onreadystatechange=function(){ if(xhr.readyState===xhr.DONE){ console.log("done"); } } console.log("response"+xhr.responseText); for(var i=0;i<3;i++){ console.log(i);="" }<="" code=""></3;i++){>
上面open方法沒有傳入第三個參數,也就是使用了默認值true,表明這是一個異步的請求,最後程序的輸出爲:
var xhr=new XMLHttpRequest(); xhr.open("GET","http://127.0.0.1/getResponseHeader.php"); xhr.send(null); xhr.onreadystatechange=function(){ if(xhr.readyState===xhr.DONE){ console.log(xhr.getResponseHeader("Content-Type")); } }
上面這一段代碼會輸出」text/html「,也就是說在相應頭中的Content-Type就是這個。