Ajax(Asynchronous Javascript+XML)是一種以異步方式從服務器獲取數據的技術,用戶單擊了一個鏈接,不用重新載入整個頁面,也能夠獲取新的數據。
創建XHR(XMLHttpRequest的簡稱)對象的時候,IE瀏覽器和非IE瀏覽器是不同的:
var xhr;
xhr = new ActiveXObject('Microsoft.XMLHTTP'); //IE瀏覽器
xhr = new XMLHttpRequest(); //非IE瀏覽器
open()函數
eg.
xhr.open("get","example.php",false);
第一個參數:"get"、"post"等
第二個參數:URL,相對於當前頁面或絕對路徑
第三個參數:true/false,是否異步發送請求
send()函數
必須有一個參數,作為請求主體發送的數據,不需要通過請求主體發送數據必須傳入null
XHR對象的屬性
responseText:作為相應主體被返回的文本
responseXML:如果響應內容是"text/xml"或"application/xml",這個屬性中將保存包含着相應數據的XML文檔,對於非XML數據,屬性值為null
status:響應的HTTP狀態
200-成功
304-請求的資源沒有被修改,可以使用瀏覽器緩存的版本
statusText:HTTP的狀態說明
readyState:請求/響應過程中的當前活動階段
0-未初始化,尚未調用open()方法
1-啟動。已調用open()方法,尚未調用send()方法
2-發送。已調用send()方法,還沒收到響應
3-接收。已接收到部分響應數據
4-完成。已經全部接收
只要readyState屬性值發生改變,都會觸發一次readyStatechange事件,觸發函數例子:
xhr.onreadystatechange = function(){do something...};
abort()函數
接收到響應之前用於取消異步請求
下面的例子是跟着php100視頻教程寫的,這是個很好的學PHP的教程,視頻可以到php100網站下載。
這里用了3個文件:index.html , ajax.js , for.php
點擊index.html的鏈接,會觸發ajax.js中的Fetch函數,然后ajax.js中的Fetch函數取到for.php中的數據之后,顯示在index.html頁面上。
index.html文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="ajax.js"></script> </head> <body> <a href="#" onclick="Fetch('1')">1</a> <a href="for.php?id=2">2</a> <a href="for.php?id=3">3</a> <div id="show"></div> </body> </html>
ajax.js文件:
var xmlHttp; function S_xmlhttprequest() { if(window.ActiveXObject) {xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');//alert("IE瀏覽器!"); } else if(window.XMLHttpRequest) {xmlHttp = new XMLHttpRequest();//alert("非IE瀏覽器!"); } } function Fetch(url) { S_xmlhttprequest(); xmlHttp.open("get","for.php?id="+url,true); xmlHttp.onreadystatechange = Response; xmlHttp.send(null); } function Response() { if(xmlHttp.readyState == 1) { document.getElementById('show').innerHTML = "loading..."; } if(xmlHttp.readyState == 4) { if(xmlHttp.Status == 200) { var v = xmlHttp.responseText; document.getElementById("show").innerHTML = v; } } }
for.php文件:
<?php $id = $_GET['id'];
sleep(2); //停頓兩秒,顯示loading……效果,但是只有IE9可以,Chrome和Opera不行,不知為何 if($id) { for($i = 0; $i < 10; $i++) echo $id; } exit(); ?>
上面例子在IE9中測試沒問題,但在Chrome和Opera中點了1之后要么就沒反應,要么就一直顯示loading,不知是什么情況,還沒找到問題所在。