① post和get的區別
區別一:語義上的區別
1、Get向伺服器請求數據。依照HTTP協議,get 是用來請求數據。
2、Post向伺服器發數據。依照HTTP協議,Post的語義是向伺服器添加數據,也就是說按照Post的語義,該操作是會修改伺服器上的數據的。
區別二:伺服器請求的區別
1、Get請求是可以被緩存的,舉個例子,你訪問.com,就是向的伺服器發了個Get請求,這個請求的返回,也就是的主頁頁面內容,會被緩存在你瀏覽器中,短時間再次訪問,其實是拿到的瀏覽器中的緩存內容。另外Get請求只能接收ASCII碼的回復
2、Post請求是不可以被緩存的。對於Post方式提交表單,刷新頁面瀏覽器會彈出提示框 「是否重新提交表單」,Post可以接收二進制等各種數據形式,所以如果要上傳文件一般用Post請求。
區別三:參數放請求頭和請求體的差別
1、Get請求通常沒有請求體(當然這也是可以由程序猿心情改變的),在TCP傳輸中只需傳輸一次(而不是一個包),所以Get請求效率相對高。
2、Post請求將數據放在請求體中,而實際傳輸中,會先傳輸完請求頭,再傳輸請求體,是分為兩次傳輸的(而不是兩個包)。Post請求頭會比Get更小(一般不帶參數),請求頭更容易在一個TCP包中完成傳輸,更何況請求頭中有Content-Length的標識,可以更好地保證Http包的完整性。
② Ajax向伺服器發送請求和接收返回的信息
Ajax向伺服器發送請求
Ajax對象創建完成後,下面就要講解一下Ajax如何使用。首先詳細講解一下Ajax向伺服器發送請求所需的兩個方法,具體如下:
(1)open()方法
open()方法用於創建一個新的HTTP請求,並指定此請求的類型(如GET、POST等)、URL以及驗證信息,其聲明方式如下所示:
在上述聲明中,method用於指定請求的類型,其值可為POST、GET、PUT及PROPFIND,大小寫不敏感;URL表示請求的地址,可以為絕對地址也可以為相對地址,並且可以傳遞查詢字元串。其餘參數為可選參數,其中,asyncFlagy用於指定請求方式,同步請求為false,默認為非同步請求true;userName用於指定用戶名,password用於指定密碼。
(2)send()方法
send()方法用於發送請求到HTTP伺服器並接收回應。其聲明方式如下所示:
在上述聲明中,content用於指定要發送的數據,其值可為DOM對象的實例、輸入流或字元串,一般與POST請求類型配合使用,需要注意的是,如果請求聲明為同步,該方法將會等待請求完成或者超時才會返回,否則此方法將立即返回。
需要注意的是,在使用GET方式傳遞特殊字元或中文參數時,要使用JavaScript中的encodeURIComponent()函數將其轉換成「%十六進制數」的形式,防止在某些瀏覽器(如IE瀏覽器)中中文亂碼的問題。
Ajax接收伺服器返回的信息
了解Ajax向伺服器發送請求後,下面將對Ajax如何接收伺服器返回的信息(例如,HTML標簽、CSS樣式、字元串、XML、JSON等),進行詳細講解。具體如下:
(1)readyState屬性
readyState屬性用於返回Ajax的當前狀態,狀態值有5種形式,具體如表所示。
(2)onreadystatechange屬性
onreadystatechange事件屬性用於感知readyState屬性狀態的改變。為了大家更好的理解這兩個屬性的使用,下面創建一個伺服器端的文件index.php,用於輸出字元串,然後在瀏覽器端index.html中向伺服器端發送請求,並在控制台輸出狀態值。具體示例如下所示:
創建伺服器端文件:index.php
創建瀏覽器端文件:index.html
在瀏覽器中訪問客戶端文件,按「F12」鍵,切換到控制台,查看輸出結果,具體如下圖所示。
從圖中可以看出,通過onreadystatechange事件屬性可以清晰的感知Ajax狀態的改變,同時使用readyState獲取轉變後的狀態值。例如Ajax從0(未初始化)狀態變成1(初始化)狀態值時,Ajax此時的狀態值為1。
(3)status屬性
status屬性用於返回當前請求的HTTP狀態碼,常見的狀態碼如表所示。
值得一提的是,在感知當前Ajax對象狀態時,為了追求程序的嚴謹性,需要同時判斷當前HTTP狀態status是否等於200(請求成功)。
需要注意的是,Ajax中的statusText屬性,僅當數據發送並接收完畢後,才可以獲取當前請求的響應狀態。
(4)獲取響應信息的相關屬性
當數據接收完畢且請求伺服器的請求成功時,即可以使用Ajax中提供的相關屬性獲取伺服器的響應信息。具體的屬性及相關說明如下表所示。
在上表中,responseText屬性用於返迴文本格式的響應數據;屬性responseBody表示直接從伺服器返回並未經解碼的二進制數據;responseXML屬性用於接收XML數據格式的響應數據。