1. 程式人生 > >AJAX中get和post請求詳解

AJAX中get和post請求詳解

一、get()和post()基本區別
1.get 是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。
2.對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的資料。兩種方式的引數都可以用Request來獲得。
3.get傳送的資料量較小,不能大於2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,因伺服器的不同而異。

4.get安全性非常低,post安全性較高。 

二、談Ajax的Get和Post的區別

   用get方式可傳送簡單資料,但大小一般限制在1KB下,資料追加到url中傳送(http的header傳送),也就是說,瀏覽器將各個表單欄位元素及其資料按照URL引數的格式附加在請求行中的資源路徑後面。另外最重要的一點是,它會被客戶端的瀏覽器快取起來,那麼,別人就可以從瀏覽器的歷史記錄中,讀取到此客戶的資料,比如帳號和密碼等。因此,在某些情況下,get方法會帶來嚴重的安全性問題。

Ajax傳送請求:如果是get請求send(引數)引數:必須是null或xhr.send();

GET 請求

一個簡單的 GET 請求:

xmlhttp.open("GET","demo_get.asp",true);
    xmlhttp.send();
      

在上面的例子中,您可能得到的是快取的結果。

為了避免這種情況,請向 URL 新增一個唯一的 ID:

xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
    xmlhttp.send();
      如果您希望通過 GET 方法傳送資訊,請向 URL 新增資訊:
xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
    xmlhttp.send();

 get請求就不必要設定 xhr.setRequestHeader(header,value)

備註:如果xhr.send(引數);引數不為空情況下,在某些瀏覽器中會自動轉換成post請求方式 您可以通過request.getMethod();方法獲取請求的方式     與 POST 相比,GET 更簡單也更快,並且在大部分情況下都能用。

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

  • 無法使用快取檔案(更新伺服器上的檔案或資料庫)
  • 向伺服器傳送大量資料(POST 沒有資料量限制)
  • 傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠 
     

   POST 請求

    一個簡單 POST 請求:

   xmlhttp.open("POST","demo_post.asp",true);
   xmlhttp.send();

如果需要像 HTML 表單那樣 POST 資料,請使用 setRequestHeader() 來新增 HTTP 頭。然後在 send() 方法中規定您希望傳送的資料:

   xmlhttp.open("POST","ajax_test.asp",true);
   xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
   xmlhttp.send("fname=Bill&lname=Gates");

例項:
function getAjax(){ 

     //獲取xhr物件
     var xhr = getXhr();
     //規定請求型別     
     xhr.open("get","main.jsp?username=123",true);
     //傳送請求
     xhr.send();
    //處理伺服器響應事件
     xhr.onreadystatechange = function (){
          //判讀是否處理完畢 與判讀伺服器是否處理成功!
          if(xhr.readyState==4 && xhr.status==200){
                    alert(xhr.responseText);
              }
          }
      } 
}