欄目列表

AJAX技術簡介

更新時間:2015-09-14 13:17來源:未知 作者:admin 點擊:
簡單介紹ajax的使用,并提供瀏覽器兼容方案,最好的前端培訓就在臨沂六牛IT教育培訓中心

什么是 AJAX?

AJAX (異步 JavaScript 和 XML) 是個新產生的術語,專為描述JavaScript的兩項強大性能.這兩項性能在多年來一直被網絡開發者所忽略,直到最近Gmail, Google Suggest和Google Maps的橫空出世才使人們開始意識到其重要性.

這兩項被忽視的性能是:

  • 無需重新裝載整個頁面便能向服務器發送請求.
  • 對XML文檔的解析和處理


步驟 1 – "請!" --- 如何發送一個HTTP請求


為了用JavaScript向服務器發送一個HTTP請求, 需要一個具備這種功能的類實例. 這樣的類首先由Internet Explorer以ActiveX對象引入, 被稱為XMLHTTP. 后來Mozilla, Safari 和其他瀏覽器紛紛仿效, 提供了XMLHttpRequest類,它支持微軟的ActiveX對象所提供的方法和屬性.

因此, 為了創建一個跨瀏覽器的這樣的類實例(對象), 可以應用如下代碼:

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
}

(上例對代碼做了一定簡化,這是為了解釋如何創建XMLHTTP類實例. 實際的代碼實例可參閱本篇步驟3.)

如果服務器的響應沒有XML mime-type header,某些Mozilla瀏覽器可能無法正常工作. 為了解決這個問題, 如果服務器響應的header不是text/xml,可以調用其它方法修改該header.

http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');

接下來要決定當收到服務器的響應后,需要做什么.這需要告訴HTTP請求對象用哪一個JavaScript函數處理這個響應.可以將對象的onreadystatechange屬性設置為要使用的JavaScript的函數名,如下所示:

http_request.onreadystatechange = nameOfTheFunction;

注意:在函數名后沒有括號,也無需傳遞參數.另外還有一種方法,你可以使用一個匿名函數來描述那些要對服務器返回的響應內容所進行的操作,如下所示:

http_request.onreadystatechange = function(){
    // do the thing
};

在定義了如何處理響應后,就要發送請求了.可以調用HTTP請求類的open()send()方法, 如下所示:

http_request.open('GET', 'http://www.example.org/some.file', true);
http_request.send(null);
  • open()的第一個參數是HTTP請求方式 – GET, POST, HEAD 或任何服務器所支持的您想調用的方式. 按照HTTP規范,該參數要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求.有關HTTP請求方法的詳細信息可參考 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs
  • 第二個參數是請求頁面的URL.由于自身安全特性的限制,該頁面不能為第三方域名的頁面.同時一定要保證在所有的頁面中都使用準確的域名,否則 調用open()會得到"permission denied"的錯誤提示.一個常見的錯誤是訪問站點時使用domain.tld,而當請求頁面時,卻使用www.domain.tld.
  • 第三個參數設置請求是否為異步模式.如果是TRUE, JavaScript函數將繼續執行,而不等待服務器響應.這就是"AJAX"中的"A".

如果第一個參數是"POST",send()方法的參數可以是任何想送給服務器的數據. 這時數據要以字符串的形式送給服務器,如下所示:

name=value&anothername=othervalue&so=on

 

步驟 2 – "收到!" --- 處理服務器的響應


當發送請求時,要提供指定處理響應的JavaScript函數名.

http_request.onreadystatechange = nameOfTheFunction;

我們來看看這個函數的功能是什么.首先函數會檢查請求的狀態.如果狀態值是4,就意味著一個完整的服務器響應已經收到了,您將可以處理該響應.

if (http_request.readyState == 4) {
    // everything is good, the response is received
} else {
    // still not ready
}

readyState的取值如下:

  • 0 (未初始化)
  • 1 (正在裝載)
  • 2 (裝載完畢)
  • 3 (交互中)
  • 4 (完成)
(責任編輯:admin)
熱點內容
推薦內容
江苏快三官网