Ajax(Asynchronous JavaScript and XML),使用戶在使用Web程序時,不用在來來回回的Post了,可以近乎實(shí)時的從客戶端收到服務(wù)器返回的信息,而無需刷新,極大的非富了用戶的操作體驗(yàn)。
XMLHttpRequest對象是Ajax的核心對象
不同的瀏覽器,建立對象的方式不同這里以IE為例
var request = new ActiveXObject("Microsoft.XMLHTTP")
XMLHttpRequest對象的方法和屬性:
open(request-type,url,asynch,username,password):建立到服務(wù)器的新請求。
request-type 發(fā)送請求的類型:get,post,head
url 要連接的url
asynch 可選參數(shù),如使用異步連接為true,如使用同步連接為false,默認(rèn)值為true
username 可選參數(shù),如果需要身份驗(yàn)證,則可以在此指定用戶名,無可選參數(shù)
password 可選參數(shù),如果需要身份驗(yàn)證,則可以在此指定口令,無可選參數(shù)
send(content):向服務(wù)器發(fā)送請求。
content 要發(fā)送的內(nèi)容
abort():退出當(dāng)前請求。
readyState:提供當(dāng)前 HTML 的就緒狀態(tài)。
0:請求未初始化
1:請求已經(jīng)建立,但是還沒有發(fā)送(還沒有調(diào)用 send())
2:請求已發(fā)送,正在處理中(通常現(xiàn)在可以從響應(yīng)中獲取內(nèi)容頭)
3:請求在處理中,通常響應(yīng)中已有部分?jǐn)?shù)據(jù)可用了
4:響應(yīng)已完成
status:提供當(dāng)前HTML的狀態(tài)碼
401:未經(jīng)授權(quán)
403:禁止訪問
404:沒找到訪問頁
200:正常
XMLHttpRequest對象的Head請求
取得Response的Header
request.getAllResponseHeaders();
request.getResponseHeader("Server");
request.getResponseHeader("Connection");
request.getResponseHeader("Date");
request.getResponseHeader("Content-Length");
request.getResponseHeader("Keep-Alive");
request.getResponseHeader("X-Cache");
request.getResponseHeader("Content-Type");
設(shè)置Request的Header
request.setRequest("Server") = "";
request.setRequest("Connection") = "";
request.setRequest("Date") = "";
request.setRequest("Content-Length") = "";
request.setRequest("Keep-Alive") = "";
request.setRequest("X-Cache") = "";
equest.setRequest("Content-Type") = "";
一、異步調(diào)用的程序示例
<script language="JavaScript">
var request = new ActiveXObject("Microsoft.XMLHTTP"); //建立XMLHttpRequest對象
function sendRequest()
{
url = "
http://test/test.asp?Name=" + Value; //設(shè)置要發(fā)送的Url,發(fā)送的值為鍵值對
request.open("get",url,true); //調(diào)用open方法
request.onreadystatechange = showMessage; //設(shè)置服務(wù)器要回調(diào)的方法
request.send(null); //發(fā)送
}
function showMessage()
{
if(request.readyState == 4 && request.status == 200)
{
alert(request.responseText);
}
}
</script>
二、同步調(diào)用程序示例
<script language="JavaScript">
var request = new ActiveXObject("Microsoft.XMLHTTP"); //建立XMLHttpRequest對象
request.open("get",url,false); //調(diào)用open方法
request.send(null); //發(fā)送
alert(request.responseText);
}
</script>
異步請求程序示例說明:程序首先建立了XMLHttpRequest對象,之后以異步的方法執(zhí)行請求,onreadystatechange是在請求狀態(tài)發(fā)生改變時,服務(wù)器要回調(diào)的客端方法,要在send()方法之前設(shè)置,在showMessage()方法里,當(dāng)readState的狀態(tài)為4且 status為200時,執(zhí)行操作同步請求與異步請求的差別在于,同步請求時,客戶端要行進(jìn)等待,當(dāng)服務(wù)器處理完請求后再在執(zhí)行以下的程序,而異步請求不必如此,客戶端的程序在請求發(fā)出之后就可以繼續(xù)執(zhí)行,而不必等待,直到服務(wù)器處理后,再回調(diào)用onreadystatechange注冊的方法。
三、請求Head的程序示例
<script language="JavaScript">
var request = new ActiveXObject("Microsoft.XMLHTTP"); //建立XMLHttpRequest對象
function sendRequest()
{
url = "
http://test/test.asp"; //要發(fā)送的Url
request.open("head",url,true); //調(diào)用open方法
request.onreadystatechange = showMessage; //設(shè)置服務(wù)器要回調(diào)的方法
request.send(null); //發(fā)送
}
function showMessage()
{
if(request.readyState == 4 && request.status == 200)
{
alert(request.getAllResponseHeaders()); //取得Header的值
}
}
</script>
這個方法與上一個方法的不同之處就在于open()方法的第一個參數(shù)是head,我們可以重寫showMessage以取得相應(yīng)的Head值
function showMessage()
{
if(request.readyState == 4 && request.status == 200)
{
alert(request.getResponseHeader("Server"));
alert(request.getResponseHeader("Connection"));
alert(request.getResponseHeader("Date"));
alert(request.getResponseHeader("Content-Length"));
alert(request.getResponseHeader("Keep-Alive"));
alert(request.getResponseHeader("X-Cache"));
alert(request.getResponseHeader("Content-Type"));
}
}
四、發(fā)送XML數(shù)據(jù)
XMLHttpRequest對象可向服務(wù)器發(fā)送XML格式的數(shù)據(jù),但這樣做會降低程序的響應(yīng)速度,因?yàn)榕c普通的文本相比,XML格式的數(shù)據(jù),要處理更多額外的東西,建議沒有必要的情況下,不要使用XML
發(fā)送XML數(shù)據(jù)的程序示例
<script language="JavaScript">
var request = new ActiveXObject("Microsoft.XMLHttpRequest"); //建立XMLHttpRequest對象
function sendXmlRequest()
{
xml = ""; //XML數(shù)據(jù)
url = "
http://test/test.asp"; //設(shè)置發(fā)送的Url
request.open("post",url,false); //調(diào)用open方法
request.setRequestHeader("Content-Type","text/xml"); //設(shè)置發(fā)送請求的頭
request.send(xml);
//要執(zhí)行的程序
}
</script>