Ajax中的get和post用法差別介紹

來源:互聯網
上載者:User

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安全性較高。

5、 <form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一樣的,也就是說,method為get時action頁面後邊帶的參數列表會被忽視;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一樣的。

另外

Get請求有如下特性:它會將資料添加到URL中,通過這種方式傳遞到伺服器,通常利用一個問號?代表URL地址的結尾與資料參數的開端,後面的參數每一個資料參數以“名稱=值”的形式出現,參數與參數之間利用一個串連符&來區分。
Post請求有如下特性:資料是放在HTTP主體中的,其組織方式不只一種,有&串連方式,也有分割符方式,可隱藏參數,傳遞大批資料,比較方便。

通過以上的說明,現在我們大致瞭解了什麼時候用get什麼時候用post方式了吧,對!當我們在提交表單的時候我們通常用post方式,當我們要傳送一個較大的資料檔案時,需要用post。當傳遞的值只需用參數方式(這個值不大於2KB)的時候,用get方式即可。

現在我們再看看通過URL發送請求時,get方式和post方式的區別。用下面的例子可以很容易的看到同樣的資料通過GET和POST來發送的區別, 發送的資料是 username=張三 :
GET和POST的根本區別如下:

GET通過URL傳遞參數(以本文的動態地址 http://www.oncoding.cn/?p=480 為例),同時發送要求標頭,從伺服器取得資料:

 代碼如下 複製代碼

GET /?p=480 HTTP/1.1

Host: www.oncoding.cn

Mozilla/5.0

….

POST也需要URL和要求標頭,同時需要額外發送資料到伺服器,然後取得伺服器響應,其資料格式如下:

POST /wp-login.php HTTP/1.1

Host: www.oncoding.cn

User-Agent: Mozilla/5.0

….

userid=admin&password=asdfg

GET和POST為什麼有速度的差異?

POST比GET多出了一個發送資料的步驟,我們可以通過MIDP實現GET和POST的程式碼來理解這一個過程:

 代碼如下 複製代碼

// MIDP實現GET的過程(變數定義省略):
conn = (HttpConnection) Connector.open( url ); //建立串連
conn.setRequestProperty( "User-Agent", agent ); //佈建要求頭
 
int rc = conn.getResponseCode(); //取得響應
// ....
// MIDP實現POST的過程(encodedData為post資料):
conn = (HttpConnection) Connector.open( url ); //建立串連
conn.setRequestMethod( HttpConnection.POST ); //佈建要求頭
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", 
                encodedData.length() );
 
OutputStream os = conn.openOutputStream(); //發送資料
os.write( encodedData.getBytes() );
 
int rc = conn.getResponseCode(); //取得響應


區別就是一個在 URL 請求裡面附帶了表單參數和值, 一個是在 HTTP 要求的訊息實體中。

比較一下上面的兩段文字, 我們會發現 GET 方式把表單內容放在前面的要求標頭中, 而 POST 則把這些內容放在請求的主體中了, 同時 POST 中把請求的 Content-Type 頭設定為 application/x-www-form-urlencoded. 而發送的本文都是一樣的, 可以這樣來構造一個表單提交本文:

 代碼如下 複製代碼
encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&.....

注: encodeURIComponent 返回一個包含了 charstring 內容的新的 String 對象(Unicode 格式), 所有空格、標點、重音符號以及其他非 ASCII 字元都用 %xx 編碼代替,其中 xx 等於表示該字元的十六進位數。 例如,空格返回的是 "%20" 。 字元的值大於 255 的用 %uxxxx 格式儲存。參見 JavaScript 的 encodeURIComponent() 方法.

在瞭解了上面的內容後我們現在用ajax的XMLHttpRequest對象向伺服器分別用GET和POST方式發送一些資料。

GET 方式

 代碼如下 複製代碼
var postContent ="name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("GET", "somepage" + "?" + postContent, true);
xmlhttp.send(null);


POST 方式

 代碼如下 複製代碼

var postContent ="name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("POST", "somepage", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//xmlhttp.setRequestHeader("Content-Type", "text/xml"); //如果發送的是一個xml檔案
xmlhttp.send(postContent);

Ajax的GET與POST在速度上有多少差別

剛剛有老外寫的一篇GET and POST Requests in AJAX,比較GET和POST在Ajax中的速度問題,寫的洋洋洒洒,但通篇沒有一點資料和理論,各瀏覽器的測試結果居然只有”Very slow”和”Fast”。。。

我們乾脆自己寫程式來測試一下,通過發送Ajax請求前和接收到Ajax資料後的時間差,來測試其速度的差異。使用了純Javascript和jquery兩種方式作比較。

測試DEMO在這裡 | 下載測試程式包(請根據網速,酌情修改請求時間間隔,否則會引起混亂)

手頭的幾個瀏覽器測試了一下,PHP程式放在美國Dreamhost伺服器上,通過山東電信網路測試結果如下:

Firefox 3.5

Chrome 4.0.266 Beta

IE8

虛擬機器中的IE6:

虛擬機器中的Firefox 2.0:

 

現在還瀏覽jquery啊,看看jquery get,post

jQuery中用於Ajax的$.get()和$.post()用法小結:
常用的load()方法通常可以用來從Web伺服器上擷取靜態資料檔案,當屬這並不能體現Ajax的全部特性。在實際的開發中,如果需要傳遞一些參數給伺服器中的頁面,那麼可以使用$.get()或者$.post()方法(或者是後面要講解到的$.ajax方法)。
注意:$.get()和$.post()方法是jQuery中的全域函數。前面講到的load()方式是對jQuery對象進行操作的。
$.get()方法:
$.get()方法使用GET方式來進行非同步請求。
它的文法結構為:
$.get( url [, data] [, callback] [, type] )
$.get()方法參數解釋如下:
參數名稱:url 類型:String 說明:請求的HTML頁的URL地址
參數名稱:data(可選) 類型:Object 說明:發送至伺服器的key/value資料會作為QueryString附加到請求URL中
參數名稱:callback(可選) 類型:Function 說明:載入成功時的回呼函數(只有當Response的返回狀態時success才調用該方法)自動將請求結果和狀態傳遞給該方法
參數名稱:type(可選) 類型:String 說明:伺服器端返回內容的格式,包括xml、html、script、json、text和_default

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.