XMLHttpRequest對象來與服務器交換數據。
發送請求到服務器
發送一個請求到服務器,我們使用open()和send() XMLHttpRequest對象的方法:
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
方法 | 描述 |
---|---|
open(method, url, async) | 指定請求的類型 method :請求的類型: GET或POST url :服務器(文件)的位置 async : true (異步)或false (同步) |
send() | 將請求發送給服務器(用於GET ) |
send(string) | 將請求發送給服務器(用於POST ) |
GET或POST ?
GET是簡單和速度比POST ,可在大多數情況下被使用。
然而,始終使用POST請求時:
- 緩存的文件不是一個選項(更新服務器上的文件或數據庫)。
- 發送大量的數據到服務器( POST沒有大小限制)。
- 發送用戶輸入(可以包含未知字符), POST更加強大和安全比GET 。
GET請求
一個簡單的GET請求:
在上面的例子中,你可能會得到一個緩存的結果。 為了避免這種情況,添加一個唯一ID to the URL: ID to the URL:
如果你想與信息發送GET方法,將信息添加到URL:
POST請求
一個簡單的POST請求:
要POST數據,如一個HTML表單,添加一個HTTP header用setRequestHeader() 指定要在發送數據send()方法:
例
xhttp.open("POST", "ajax_test.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
試一試» 方法 | 描述 |
---|---|
setRequestHeader(header, value) | 添加HTTP標頭的請求 header :指定頭名 value :指定頭值 |
網址 - 上的文件服務器
該url的參數open()方法,是一個地址到服務器上的文件:
xhttp.open("GET", "ajax_test.asp", true);
該文件可以是任何類型的文件,如.txt和.xml或類似的.asp和.PHP(可發送回響應之前在服務器上執行的操作)服務器的腳本文件。
異步- True還是False ?
AJAX代表了異步JavaScript和XML,以及XMLHttpRequest對象的行為與AJAX的async的參數open()方法,已被設置為true:
xhttp.open("GET", "ajax_test.asp", true);
發送異步請求是Web開發人員一個巨大的進步。 許多的服務器上執行的任務是非常耗時。 AJAX之前,這種操作可能會導致掛起或停止應用程序。
隨著AJAX,在JavaScript沒有等待服務器的響應,而是可以:
- 執行其他腳本在等待服務器響應
- 處理時的響應的響應就緒
Async=true
當使用類=“notranslate”新增異步=真實,指定一個功能,當響應是onreadystatechange事件準備執行:
例
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("demo").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
試一試» 您將了解的onreadystatechange在後面的章節。
Async=false
要使用async=false ,更改第三個參數open()方法為false:
xhttp.open("GET", "ajax_info.txt", false);
使用async=false不建議,但對於一些小的請求,這可能是好的。
請記住,JavaScript就無法繼續執行,直到服務器響應準備。 如果服務器太忙或太慢,應用程序將掛起或停止。
注意:當您使用async=false ,不寫一個函數的onreadystatechange -只要把代碼後send()語句:
例
xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;
試一試»