1. 程式人生 > >原生JavaScript實現Ajax的使用

原生JavaScript實現Ajax的使用

Ajax 是一種無需重新載入整個網頁的情況之下能夠更新部分網頁的技術。非同步請求,區域性重新整理。

1.非同步操作

  • 需要XMLHttpRequest物件。
  • 後臺與伺服器進行資料的交換,資料交換的同時不載入整個頁面,可以對網頁進行部分的更新。

2.XMLHttpRequest 物件

  • 例項化,建立XMLHttpRequest物件(需要判斷網頁)

    var request;
    if(window.XMLHttpRequest)
    {
        request=new XMLHttpRequest();//IE7+,Firefox,Chrome,Opera,Safari...
    }
    else
    { request=new ActiveXObject("Microsoft.XMLHTTP");//IE6,IE5 }

2.HTTP請求

  • 包含四個部分
    • HTTP請求的方法或動作,即GET/POST
    • 正在請求的URL
    • 請求頭,包含一些客戶端環境資訊,身份驗證資訊等
    • 請求體,即請求正文,可以包含客戶提交的查詢字串資訊,表單資訊等
      請求頭與請求體中間有空行,表示請求頭已經結束
  • GET/POST
    • GET用於查詢,不改變資料資訊;用URL傳遞引數(所有人可見);所傳送資訊的數量有限制,一 般在2000個字元;冪等
    • POST用於修改、新建資料;傳遞的引數嵌入http請求體中;數量無限制;安全

3.HTTP響應

  • 包含三個部分
    • 狀態碼(數字和文字組成),用來顯示請求是成功還是失敗。
    • 相應頭,包含許多有用的資訊,如伺服器型別、日期時間、內容型別。。。
    • 響應體,即相應正文
  • 狀態碼
    • 1xx:資訊類,表示收到web瀏覽器請求,正在進一步的處理。
    • 2xx:成功,使用者請求被正確接收,理解和處理。200 OK
    • 3xx:重定向,請求沒有成功,客戶必須採取進一步的動作
    • 4xx:客戶端錯誤,提交的清錯有錯誤。404 NOT Found
    • 5xx:伺服器錯誤,伺服器不能完成對請求的處理。500

4.步驟

  • 例項化,建立XMLHttpRequest物件(需要判斷網頁)

    var request;
    if
    (window.XMLHttpRequest) { request=new XMLHttpRequest();//IE7+,Firefox,Chrome,Opera,Safari... } else { request=new ActiveXObject("Microsoft.XMLHTTP");//IE6,IE5 }
  • 傳送請求(方法)
    • open(method,url,async) 引數分別為:GET或POST/地址/true或false(可不寫) 呼叫http請求
    • send(string) 把請求傳送到伺服器。當方法為POST時要填寫,GET可以不寫或者寫null
    • 在POST時,需要在open()和send()中新增一行程式碼,用來設定send()方法的格式
      request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  • 取得響應

    • responseTest:獲得字串形式的響應資料。
    • responseXML:獲得XML形式的響應資料。
    • status和statusTest:以數字和文字形式返回HTTP狀態碼。
    • getAllResponseHeader():獲取所有的響應報頭
    • getResponseHeader():查詢響應中的某個欄位的值。
    • readyState屬性:為4時表示請求已完成,且響應已就緒。
    var request=new XMLHttpRequest();
    request.open("GET","get.php",true);
    request.send();
    request.onreadystatechange=function()
    {
        if(request.readyState===4&&request.status===200)
        {
            //做一些事情 request.responseText
        }
    }