1. 程式人生 > >7.11隨筆

7.11隨筆

software object get 但是 運行 裏的 href 毫無 完全

readystate取值 描述
0 描述一種"未初始化"狀態;此時,已經創建一個xmlhttprequest對象,但是還沒有初始化。
1 描述一種"發送"狀態;此時,代碼已經調用了xmlhttprequest open()方法並且xmlhttprequest已經準備好把一個請求發送到服務器。
2 描述一種"發送"狀態;此時,已經通過send()方法把一個請求發送到服務器端,但是還沒有收到一個響應。
3 描述一種"正在接收"狀態;此時,已經接收到http響應頭部信息,但是消息體部分還沒有完全接收結束。
4 描述一種"已加載"狀態;此時,響應已經被完全接收。

 

status屬性:這個status屬性描述了http狀態代碼,而且其類型為short。而且,僅當readystate值為3(正在接收中)或4(已加載)時,這個status屬性才可用。當readystate的值小於3時試圖存取status的值將引發一個異常。
  

responsetext屬性:這個responsetext屬性包含客戶端接收到的http響應的文本內 容。當readystate值為0、1或2時,responsetext包含一個空字符串。當readystate值為3(正在接收)時,響應中包含客戶 端還未完成的響應信息。當readystate為4(已加載)時,該responsetext包含完整的響應信息。
  

statustext屬性:這個statustext屬性描述了http狀態代碼文本;並且僅當readystate值為3或4才可用。當readystate為其它值時試圖存取statustext屬性將引發一個異常。

這個就解決了我當時的疑問:為什麽xmlhttp.readystate==4一定要是4呢,是1000不行麽,這就告訴我,不行!。

問題2:至於那個status==200,這裏有個解釋:ajax中,xmlhttprequest對象的status屬性一般用來返回服務器的http狀態碼。status為200表示“成功”,status為404代表“頁面未找到”。

很多書上都是這樣寫的,一點也不錯。但是,有時候,特別是剛開始學ajax的時候,可能會將代碼直接在本地運行。這樣就出現問題了。如果在本地運行

(c:ajax helloworld.htm),那麽status屬性不管是在“成功”還是“頁面未找到”的情況下,都返回的是0,而不是200和404。這個時候如果 還

用if(xmlhttp.status==200)來判斷運行,則會毫無結果。所以如果要在本地測試,最好寫成if(xmlhttp.status== 200 || xmlhttp.status==0)的形式來判斷。

這裏有幾個參數

xmlhttprequest對象的status屬性的取值長整形標準http狀態碼,定義如下:


問題3:ajax裏的onreadystatechange的作用

發送一個請求後,客戶端無法確定什麽時候會完成這個請求,所以需要用事件機制來捕獲請求的狀態,xmlhttprequest對象提供了onreadystatechange事件實現這一功能。這類似於回調函數的做法。
onreadystatechange事件可指定一個事件處理函數來處理xmlhttprequest對象的執行結果,如:
ajaxobj=createajaxobject();
var url="/mytodoes/fetchtext?id="+id;
ajaxobj.open("get",url,true);
ajaxobj.onreadystatechange=changetabcallback;
ajaxobj.send(null);


onreadystatechange事件是在readystate屬性發生改變時觸發的,readystate的值表示了當前請求的狀態,在事件處理程序中可以根據這個值來進行不同的處理。 readystate有五種可取值0:尚未初始化,1:正在加載,2:加載完畢,3:正在處理;4:處理完畢。一旦readystate屬性的值變成了4,就可以從服務器返回的響應數據進行訪問了。
通常在事件中判斷readystate的值是在請求完畢時才做處理,如:
function changetabcallback(){
if(ajaxobj.readystate==4){
// 下一步驗證
}
}
status存儲了服務器端返回的http請求響應代碼,它表示請求的處理結果,常見響應代碼的含義如右。
在ajax開發中,最常用就是200這個響應碼,代碼如下:
function changetabcallback(){
if(ajaxobj.readystate==4){
if(ajaxobj.status==200){
// 服務端返回了正確數據,開始響應處理
}
}
}
http狀態碼 含義
200 請求成功
202 請求被接受但處理未完成
400 錯誤請求
404 請求資源未找到
500 內部服務器錯誤

7.11隨筆