在沒有使用Ajax以前,總以爲Ajax很神祕,局部刷新、與服務器通訊等,知道學習了Ajax以後,瞭解了Ajax語法以後,知道了其語法至關精簡,扼要。下面就來講一說Ajax的精妙 javascript
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。 html
XMLHttpRequest是Ajax的基礎 java
如今大部分瀏覽器均支持XMLHttpRequest對象(部分IE5 、IE6使用ActiveXObject) ajax
XMLHttpRequest用於在後臺與服務器的數據交換,在不從新加載整個網頁的狀況下,對網頁的部份內容進行加載 數據庫
在調用Ajax時,須要先建立XMLHttpRequest對象 瀏覽器
variable = new XMLHttpRequest(); 緩存
而在老版本的IE中使用該Acticex對象 服務器
variable = new ActiveXobject(「Microsoft.XMLHTTP」); dom
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"); }
如需將請求發送到服務器,咱們使用 XMLHttpRequest 對象的 open() 和 send() 方法: 異步
xmlhttp.open("GET","test1.txt",true); xmlhttp.send();
方法 | 描述 |
---|---|
open(method,url,async) | 規定請求的類型、URL 以及是否異步處理請求。
|
send(string) | 將請求發送到服務器。
|
與 POST 相比,GET 更簡單也更快,而且在大部分狀況下都能用。
然而,在如下狀況中,請使用 POST 請求:
經常使用的狀況是:
xmlhttp.open("GET","demo_get.asp",true); xmlhttp.send();上面的例子,可能會讀取到緩存結果,爲了不這種狀況,能夠向URL中添加一個惟一的ID
xmlhttp.open("GET","demo_get.asp?t=" +Math.random(),true); xmlhttp.send();
當請求被髮送到服務器時,咱們須要執行一些基於響應的任務。
每當 readyState 改變時,就會觸發 onreadystatechange 事件。
readyState 屬性存有 XMLHttpRequest 的狀態信息。
下面是 XMLHttpRequest 對象的三個重要的屬性:
屬性 | 描述 |
---|---|
onreadystatechange | 存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。 |
readyState | 存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
|
status | 200: "OK" 404: 未找到頁面 |
在 onreadystatechange 事件中,咱們規定當服務器響應已作好被處理的準備時所執行的任務。
當 readyState 等於 4 且狀態爲 200 時,表示響應已就緒:
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
函數回調 callback(),具體參考例子:
<html> <head> <script type="text/javascript"> var xmlhttp; function loadXMLDoc(url,cfunc) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=cfunc; xmlhttp.open("GET",url,true); xmlhttp.send(); } function myFunction() { loadXMLDoc("/ajax/test1.txt",function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }); } </script> </head> <body> <div id="myDiv"><h2>Let AJAX change this text</h2></div> <button type="button" onclick="myFunction()">經過 AJAX 改變內容</button> </body> </html>