一、AJax定義
- AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。
- AJAX = 異步 JavaScript和XML(標準通用標記語言的子集)。
- AJAX 是與服務器交換數據並更新部分網頁的藝術,在不重新加載整個頁面的情況下。
AJax的優點
- 頁面無刷新
- 不打斷用戶的操作,用戶的體驗好。
- 按需獲取數據,瀏覽器與服務器之間數據的傳輸量減少。
- 是一個標準技術,不需要下載任何的插件。
- 利用客戶端(瀏覽器)的計算能力。
二、AJax使用
2.1 AJax對象
所有現代瀏覽器均內建 XMLHttpRequest
對象(IE5 和 IE6 使用 ActiveXObject
)。例如:IE7+、Firefox、Chrome、Safari 以及 Opera。
2.1.1 創建對象
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
2.2 發送數據
AJax對象提供了opean()
和send()
兩個方法,具體差別如下表:
方法 | 描述 |
---|---|
open(method,url,async) |
規定請求的類型、URL 以及是否異步處理請求。(1) method:請求的類型;GET 或 POST; (2) url:文件在服務器上的位置; (3) async:true(異步)或 false(同步)。 |
send(string) |
將請求發送到服務器。string:僅用於 POST 請求 |
2.2.1 get
和post
與 POST
相比,GET
更簡單也更快,並且在大部分情況下都能用。
然而,在以下情況中,請使用 POST
請求:
- 無法使用緩存文件(更新服務器上的文件或數據庫)
- 向服務器發送大量數據(POST 沒有數據量限制)
- 發送包含未知字符的用戶輸入時,POST 比 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();
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");
2.3 獲取響應
可以通過XMLHttpRequest
對象的 responseText
或 responseXML
屬性。
屬性 | 描述 |
---|---|
responseText |
獲得字符串形式的響應數據。 |
responseXML |
獲得 XML 形式的響應數據。 |
2.3.1 responseText
屬性
一般情況下使用 responseText 屬性。
window.alert(xmlhttp.responseText);
2.3.2 responseXML
屬性
處理返回值爲XML的情況。
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("myDiv").innerHTML=txt;
2.4 監聽事件
通過onreadystatechange
事件監聽readyState
,readyState
屬性存有 XMLHttpRequest
的狀態信息。
下面是 XMLHttpRequest
對象的三個重要的屬性:
屬性 | 描述 |
---|---|
onreadystatechange |
存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。readyState `有5個值:0: 請求未初始化;1: 服務器連接已建立;2: 請求已接收;3: 請求處理中;4: 請求已完成,且響應已就緒 |
status |
200: “OK”,404: 未找到頁面 |
當 readyState
等於 4 且狀態爲 200 時,表示響應已就緒
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
}
三、jQuery實現AJax
jQuery中封裝了一些AJax的實現,其中有以下種方法:
方法 | 描述 |
---|---|
load(url,[data],[callback]) |
載入遠程HTML文件代碼並插入至DOM中,默認使用GET 方式,傳遞參數時自動轉換爲POST 方式 |
jQuery.get(url, [data], [callback]) |
使用GET 方式從服務器端獲取數據 |
jQuery.post(url, [data], [callback]) |
使用POST 方式來進行異步請求 |
jQuery.getScript(url,[callback]) |
通過 GET 方式請求載入並執行一個JavaScript文件 |
jQuery.getJSON(url,[data],[callback]) |
通過GET 方式獲取json 格式的數據 |
jQuery.ajax() |
使用AJax獲取數據如下例: |
$.ajax({
url: "demo.action", //請求的url地址
dataType: "json", //返回格式爲json
async: true, //請求是否異步,默認爲異步,這也是ajax重要特性
data: {
"id": "value"
}, //參數值
type: "GET", //請求方式
beforeSend: function() {
//請求前的處理
},
success: function(req) {
//請求成功時處理
},
complete: function() {
//請求完成的處理
},
error: function() {
//請求出錯處理
}
});
但一般經常使用$.get()
和$.post()
方法:
//POST
$.post("demo.action", {
uname: uname
}, function(result) {
alert(result);
});
//GET
$.get("demo.action", {
uname: uname
}, function(result) {
alert(result);
});