AJax

一、AJax定義

  • AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。
  • AJAX = 異步 JavaScript和XML(標準通用標記語言的子集)。
  • AJAX 是與服務器交換數據並更新部分網頁的藝術,在不重新加載整個頁面的情況下。

AJax的優點

  1. 頁面無刷新
  2. 不打斷用戶的操作,用戶的體驗好。
  3. 按需獲取數據,瀏覽器與服務器之間數據的傳輸量減少。
  4. 是一個標準技術,不需要下載任何的插件。
  5. 利用客戶端(瀏覽器)的計算能力。

二、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 getpost

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 對象的 responseTextresponseXML屬性。

屬性 描述
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);
});

參考:
w3school
jQuery學習之jQuery Ajax用法詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章