AJAX基礎(chǔ)應(yīng)用
時間:2022-02-16 12:26:01 | 來源:信息時代
時間:2022-02-16 12:26:01 來源:信息時代
創(chuàng)建XMLHttpRequest方法
XMLHttpRequest類首先由InternetExplorer以ActiveX對象引入,被稱為XMLHTTP。后來Mozilla﹑Netscape﹑Safari和其他瀏覽器也提供了XMLHttpRequest類,不過它們創(chuàng)建XMLHttpRequest類的方法不同。
對于InternetExplorer瀏覽器:
xmlhttp_request=newActiveXObject('Msxml2.XMLHTTP.3.0');//3.0或4.0,5.0
xmlhttp_request=newActiveXObject('Msxml2.XMLHTTP');
xmlhttp_request=newActiveXObject('Microsoft.XMLHTTP');
由于在不同InternetExplorer瀏覽器中XMLHTTP版本可能不一致,為了更好的兼容不同版本的InternetExplorer瀏覽器,因此我們需要根據(jù)不同版本的InternetExplorer瀏覽器來創(chuàng)建XMLHttpRequest類,上面代碼就是根據(jù)不同的InternetExplorer瀏覽器創(chuàng)建XMLHttpRequest類的方法。
對于Mozilla﹑Netscape﹑Safari等瀏覽器
創(chuàng)建XMLHttpRequest方法如下:xmlhttp_request=newXMLHttpRequest();
如果服務(wù)器的響應(yīng)沒有XMLmime-typeheader,某些Mozilla瀏覽器可能無法正常工作。為了解決這個問題,如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header。
xmlhttp_request=newXMLHttpRequest();
xmlhttp_request.overrideMimeType('text/xml');
在實(shí)際應(yīng)用中,為了兼容多種不同版本的瀏覽器,一般將創(chuàng)建XMLHttpRequest類的方法寫成如下形式:
try{
if(window.ActiveXObject){
for(vari=5;i;i--){
try{
if(i==2){
xmlhttp_request=newActiveXObject('Microsoft.XMLHTTP');}
else{
xmlhttp_request=newActiveXObject('Msxml2.XMLHTTP.' i '.0');
xmlhttp_request.setRequestHeader('Content-Type','text/xml');
xmlhttp_request.setRequestHeader('Charset','gb2312');}
break;}
catch(e){
xmlhttp_request=false;}}}
elseif(window.XMLHttpRequest)
{xmlhttp_request=newXMLHttpRequest();
if(xmlhttp_request.overrideMimeType)
{xmlhttp_request.overrideMimeType('text/xml');}}}
catch(e){xmlhttp_request=false;}
發(fā)送請求
可以調(diào)用HTTP請求類的open()和send()方法,如下所示:
xmlhttp_request.open('GET',URL,true);
xmlhttp_request.send(null);
open()的第一個參數(shù)是HTTP請求方式—GET,POST或任何服務(wù)器所支持的您想調(diào)用的方式。按照HTTP規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求。
第二個參數(shù)是請求頁面的URL。
第三個參數(shù)設(shè)置請求是否為異步模式。如果是TRUE,JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng)。這就是'AJAX'中的'A'。
服務(wù)器的響應(yīng)
這需要告訴HTTP請求對象用哪一個JavaScript函數(shù)處理這個響應(yīng)??梢詫ο蟮膐nreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:
xmlhttp_request.onreadystatechange=FunctionName;
FunctionName是用JavaScript創(chuàng)建的函數(shù)名,注意不要寫成FunctionName(),當(dāng)然我們也可以直接將JavaScript代碼創(chuàng)建在onreadystatechange之后,例如:
xmlhttp_request.onreadystatechange=function(){
//JavaScript代碼段
};
首先要檢查請求的狀態(tài)。只有當(dāng)一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。XMLHttpRequest提供了readyState屬性來對服務(wù)器響應(yīng)進(jìn)行判斷。
readyState的取值如下:
0(未初始化)
1(正在裝載)
2(裝載完畢)
3(交互中)
4(完成)
所以只有當(dāng)readyState=4時,一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。具體代碼如下:
if(http_request.readyState==4){//收到完整的服務(wù)器響應(yīng)}
else{//沒有收到完整的服務(wù)器響應(yīng)}
當(dāng)readyState=4時,一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,接著,函數(shù)會檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值。完整的狀態(tài)取值可參見W3C文檔。當(dāng)HTTP服務(wù)器響應(yīng)的值為200時,表示狀態(tài)正常。
處理從服務(wù)器得到的數(shù)據(jù)
有兩種方式可以得到這些數(shù)據(jù):
(1)以文本字符串的方式返回服務(wù)器的響應(yīng)
(2)以XMLDocument對象方式返回響應(yīng)