標籤:style blog http color 使用 io 資料 2014
在上一篇[ajax 學習筆記] ajax初試中,簡單瞭解了一下ajax。
我是參考AJAX詳解.chm學習的,資源已上傳。參考連結:Ajax 專題
今天又學習了ajax中關於伺服器響應的一些知識。
ajax中伺服器的響應是通過響應函數將伺服器返回的資料呈現到頁面的。伺服器的響應體現在伺服器響應回呼函數中。
在上一篇的例子中,響應函數為:
function updatePage(){if(xmlHttp.readyState == 4){ //http就緒狀態if(xmlHttp.status == 200){ //判斷http狀態碼var response = xmlHttp.responseText; document.getElementById("ajax-result").value = response;}else if(xmlHttp.status == 404){alert("Request url does not exist!");}else{alert("ERROR:status code is" + xmlHttp.status);}}}
關於這個響應函數要說明以下幾點:
1.xmlHttp.readyState
這個例子中xmlHttp是XMLHttpRequest對象的一個執行個體。該對象有一個readyState屬性,表示就緒狀態。
就緒狀態有五種,分別為:
> 0:請求未初始化(還沒有調用open())
> 1:請求已經建立,但是還沒有發送(還沒有調用send())
> 2:請求已發送,正在處理中(通常現在可以從響應中擷取內容標題)
> 3:請求正在處理中;通常響應中已有部分資料可用了,但是伺服器還沒有完成相應的產生
> 4:響應已完成;表示可以擷取並使用伺服器的響應了
由這幾種狀態可以知道,當XMLHttpRequest對象的readyState對象為4時,表示伺服器已經完成了對請求的響應,使用者才可以對伺服器響應的資料進行操作,於是回呼函數中會出現判斷xmlHttp為4的代碼。
試一試:如果你在回應函數中這麼寫:
function updatePage(){alert("readyState=" + xmlHttp.readyState);}
你會發現瀏覽器會彈出2~4次警告,告訴你當前的就緒狀態。這是因為每次繼續狀態改變的時候都會調用該回呼函數。
2.xmlHttp.status
XMLHttpRequest有一個status屬性用來表示HTTP的狀態代碼。(您訪問網頁的時候一定遇到過"404 not found"字樣的情況吧,這裡的狀態代碼就是404這樣的數字,用來表示伺服器HTTP響應狀態,404呢表示請求失敗,200表示請求成功,如果查看狀態代碼,你可以用web開發人員工具看一下Network一欄)
有興趣的可以多瞭解一下HTTP狀態代碼的資訊。
在回呼函數中對HTTP狀態代碼詳加判斷能夠增加程式的健壯性,同時使能夠協助使用者加速找到程式發生的問題。
3.ajax和XML
在上面回呼函數例子中用到了XMLHttpRequest的responseText屬性,它表示伺服器響應返回的文本資訊。
這裡可能有一個認識的誤區:從名字上看,XMLHttpRequest的資料傳送應該是XML格式的。其實不然。ajax的資料傳送可以是文本的(像上面例子中用get方式進行名/值傳送),也可以傳送XML文檔(用到XMLHttpRequest的responsXML屬性)。
就web應用程式用戶端而言,用文本傳送和XML傳送資料內容都是相同的,在內容相同的基礎上,XML要比普通文本浪費了空間,在傳送時浪費了時間,所以對於用戶端來說,大多數情況下,用普通文本傳送資料更好。
為什麼說使用XML增加了處理時間?
用XML傳送資料時:將文本封裝成 XML;發送額外資訊(要注意我沒有包含任何包圍元素、XML 頭或者可能出現在實際請求中的其他任何內容);讓伺服器解析 XML、產生響應、用 XML 封裝響應,並將它發送回網頁;讓網頁解析響應,最後使用它。
但是有些情況下還是要用XML的。比如用get方式傳送名/值對時,假如資料量很大,get傳送方式有一定的長度限制,這是可以考慮用XML來傳送。
就web應用程式伺服器端而言,向伺服器端發送XML情況大致分為兩類:
1> 伺服器僅接受XML請求
2> 您正在調用一個僅接受XML或SOAP請求的遠程API。(可以看成是上一種情況的特例)
如果要發送XML資料,需要兩個步驟來保證XML的資料能夠被正確接收:
1> 保證向其發送 XML 的指令碼能夠接受 XML 資料格式。
2> 保證指令碼認可發送資料所採用的特定XML格式和結構。