AJAX - 基本知識
Ajax=異步的JavaScript和XML
向請求添加 HTTP 頭:setRequestHeader(header,value)
header: 規定頭的名稱
value: 規定頭的值
通過在後台與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
一、AJAX
- 創建 XMLHttpRequest 對象
1.什麼是XMLHttpRequest對象
所有現代瀏覽器(IE7、Chrome、Firefox、Safari、Opera)均支持XMLHttpRequest對象,XMLHttpRequest對象用來在後台與服務器交換數據,實現頁麵局部刷新。
2.如何創建XMLHttpRequest對象
一般瀏覽器都支持XMLHttpRequest對象,但部分IE瀏覽器支持的是ActiveXObject。
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"); }
3.XMLHttpRequest對象如何與服務器交換數據
3.1 向服務器發送請求
我們使用XMLHttpRequest的Open和Send方法:
xmlhttp.open("GET","text.txt",true);
xmlhttp.send();
方法 | 描述 |
---|---|
open(method,url,async) |
規定請求的類型、URL 以及是否異步處理請求。
|
send(string) |
將請求發送到服務器。
|
3.1.1 使用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向服務器發送數據Demo:
xmlhttp.open("GET","demo_get.asp?name=heaven&age=26",true); xmlhttp.send();
3.1.3 使用POST請求:
一個簡單的POST請求:
xmlhttp.open("POST","demo_get.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");
向請求添加 HTTP 頭:setRequestHeader(header,value)
header: 規定頭的名稱
value: 規定頭的值
3.1.3關於異步True或False:
對於web開發來說,發送異步請求是一個巨大的進步,因為很多在服務器執行的任務都相當費時,在Ajax出現前,這可能會引起應用程序掛起或停止。
通過Ajax,JavaScript無需等待服務器響應,而是:
1.在等待服務器響應期間執行其它腳本
2.當響應就緒後對響應進行處理
當Async=True時,應設置onreadystatechange事件中處於就緒狀態時的執行函數:
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","test1.txt",true); xmlhttp.send();
當Async=False時,處於同步狀態,此時JavaScript會等到服務器就緒時才執行,無需寫onreadystatechange監控函數:
xmlhttp.open("GET","test1.txt",false); xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
3.2 服務器的響應
如果要獲得來自服務器的響應,使用XMLHttpRequest中的responseText或responseXML。
responseText | 獲得字符串形式的響應數據。 |
responseXML | 獲得 XML 形式的響應數據。 |
3.2.1 使用responseText
responseText 屬性返回字符串形式的響應,因此您可以這樣使用:
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
3.2.2 使用responseXML
如果來自服務器的響應是 XML,而且需要作為 XML 對象進行解析,請使用 responseXML 屬性:
請求 books.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;
3.3 Ajax 的 onreadystatechange事件
當請求發送到服務器的整個過程中,我們需要執行一些基於響應的任務,即每當readyState改變時都會觸發onreadystatechange事件,readyState屬性存有XMLHttpRequest的狀態信息。
下麵是XMLHttpRequest對象的三個重要屬性:
屬性 | 描述 |
---|---|
onreadystatechange | 存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。 |
readyState |
存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
|
status |
200: "OK" 404: 未找到頁麵 |
當readyState=4且status=200時,表示響應已就緒:
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
3.4 使用callback回調函數
callback函數是一種以參數的形式傳遞給另一個函數的函數,我們在處理Ajax任務時,一般都會寫一個處理Ajax請求的標準函數,這個標準函數包括請求的url和發生onreadystatechange時間所執行的任務:
< 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>
最後更新:2017-04-03 12:53:47
上一篇:
android JNI學習
下一篇:
Maven發布項目
java 後台框架 支持APP接口調用 APP後台 java springmvc mybaits mysql oracle html5 後台框架 手機後台框架
無人機都“實名製”了,企業建站又該如何安全著落
解決每編譯一段代碼,便需要clean一下項目的問題
magento -- 如何為商品分類(category)添加自定義屬性
軟件事務內存導論(三)用Akka/Multiverse STM實現並發
Myeclipse使用配色方案
如何將個性化需求變成大數據解決方案
[Python學習] 專題一.函數的基礎知識
阿裏分布式數據庫服務實踐
WCF後續之旅(17):通過tcpTracer進行消息的路由