ajax請求

雪沫一隅發表於2019-02-26

 var request;

if(window.XMLHttpRequest){

 request = new XMLHttpRequest();

}else{

 request = new ActiveXObject(“Microsoft.XMLHTTP”);

}

 

用XHR傳送請求:
open(method,url,async) 呼叫XHR物件,async表示同步還是非同步,預設為true(非同步);
send(String)   傳送請求。

 

request.open(“POST”,”create.php”,true);
request.setRequestHeader(“Content-type”,”application/x-www-form-urlencoded”);  //必須寫在open和send中間
request.send(“name=薰悟空&sex=男”);

 

一、xhr取得響應

  1. responseText:獲得字串形式的相應資料;
  2. responseXML:獲得XML形式的相應資料;
  3. status 和 statusText:以數字和文字形式返回http狀態碼;
  4. getAllResponseHeader():獲取所有的響應報頭;
  5. getResponseHeader():查詢響應中的某個欄位的值;
  6. readyState屬性:響應返回成功的時候得到通知;
    (1)0:請求未初始化,open還沒有呼叫;
    (2)1:伺服器連線已建立,open已經呼叫了;
    (3)2:請求已經接收,也就是接收到頭資訊了;
    (4)3:請求處理中,也就是接收到響應主體了;
    (5)4:請求已完成,且響應已就緒,也就是響應完成了;

 

 

二、典型的xhr建立ajax的過程。

  1. new一個xhr物件;
  2. 呼叫xhr物件的open方法;
  3. send一些資料;
  4. 對伺服器的響應過程進行監聽,來知道伺服器是否正確得做出了響應,接著就可以做一些事情。比如獲取伺服器響應的內容,在頁面上進行呈現;

 

 jQuery中的ajax:

  $.ajax({
          type:”GET”,
          url:”service.php?number=”+$(“#keyword”).val(),
          dataType:”json”, 預期伺服器返回資料的型別
          success:function(data){
              if(data.success){
                   $(“searchResult”).html(data.msg);
              }else{
                   $(“#searchResult”).html(“出現錯誤:” + data.msg);
              }
          },
          error:function(jqXHR){
             aler(“發生錯誤:”+ jqXHR.status);
          }
  });

 

 

get/post請求的區別:

 

1. GET請求會將引數跟在URL後進行傳遞,而POST請求則是作為HTTP訊息的實體內容傳送給WEB伺服器。當然在Ajax請求中,這種區別對使用者是不可見的。

2. 首先是”GET方式提交的資料最多隻能是1024位元組”,因為GET是通過URL提交資料,那麼GET可提交的資料量就跟URL的長度有直接關係了。而實際上,URL不存在引數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。注意這是限制是整個URL長度,而不僅僅是你的引數值資料長度。

3. GET方式請求的資料會被瀏覽器快取起來,因此其他人就可以從瀏覽器的歷史記錄中讀取到這些資料,例如賬號和密碼等。在某種情況下,GET方式會帶來嚴重的安全問題。而POST方式相對來說就可以避免這些問題。

 

get請求和post請求在伺服器端的區別:

 

4. 在客戶端使用get請求時,伺服器端使用Request.QueryString來獲取引數,而客戶端使用post請求時,伺服器端使用Request.Form來獲取引數.

HTTP標準包含這兩種方法是為了達到不同的目的。POST用於建立資源,資源的內容會被編入HTTP請示的內容中。例如,處理訂貨表單、在資料庫中加入新資料行等。

當請求無副作用時(如進行搜尋),便可使用GET方法;當請求有副作用時(如新增資料行),則用POST方法。一個比較實際的問題是:GET方法可能會產生很長的URL,或許會超過某些瀏覽器與伺服器對URL長度的限制。

然而,在以下情況中,請使用 POST 請求:

無法使用快取檔案(更新伺服器上的檔案或資料庫)

向伺服器傳送大量資料(POST 沒有資料量限制)

傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠、更安全。

相關文章