溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ajax核心XMLHTTPRequest對(duì)象的創(chuàng)建與瀏覽器的兼容問(wèn)題是怎樣的

發(fā)布時(shí)間:2021-10-08 11:47:09 來(lái)源:億速云 閱讀:114 作者:柒染 欄目:web開(kāi)發(fā)

今天就跟大家聊聊有關(guān)ajax核心XMLHTTPRequest對(duì)象的創(chuàng)建與瀏覽器的兼容問(wèn)題是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

MLHttpRequest 對(duì)象是AJAX功能的核心,要開(kāi)發(fā)AJAX程序必須從了解XMLHttpRequest 對(duì)象開(kāi)始。

了解XMLHttpRequest 對(duì)象就先從創(chuàng)建XMLHttpRequest 對(duì)象開(kāi)始,在不同的瀏覽器中創(chuàng)建XMLHttpRequest 對(duì)象使用不同的方法:

先看看IE創(chuàng)建XMLHttpRequest 對(duì)象的方法(方法1):

 var xmlhttp=ActiveXobject("Msxml12.XMLHTTP");//較新的IE版本創(chuàng)建Msxml12.XMLHTTP對(duì)象

 var xmlhttp=ActiveXobject("Microsoft.XMLHTTP");//較老的IE版本創(chuàng)建Microsoft.XMLHTTP對(duì)象

而 Mozilla、Opera、Safari 和大部分非IE的瀏覽器都使用下面這種方法(方法2)創(chuàng)建XMLHttpRequest 對(duì)象:

 var xmlhttp=new XMLHttpRequest();

注意:實(shí)際上Internet Explorer 使用了一個(gè)名為 XMLHttp 的對(duì)象,而不是 XMLHttpRequest 對(duì)象,而 Mozilla、Opera、Safari 和 大部分非 Microsoft 瀏覽器都使用的是后者(下文統(tǒng)稱(chēng) XMLHttpRequest 對(duì)象)。IE7開(kāi)始也開(kāi)始使用XMLHttpRequest 對(duì)象了。

因此我們需要?jiǎng)?chuàng)建一個(gè)能兼容多瀏覽器的XMLHTTPRequest對(duì)象:

第一種方法:

 var xmlhttp=false;//創(chuàng)建一個(gè)新變量并賦值false,使用false作為判斷條件說(shuō)明還沒(méi)有創(chuàng)建XMLHTTPRequest對(duì)象

 function CreateXMLHttp(){

 try{

  xmlhttp=new XMLHttpRequest();//嘗試創(chuàng)建 XMLHttpRequest 對(duì)象,除 IE 外的瀏覽器都支持這個(gè)方法。

}catch(e){

 try{

 xmlhttp=ActiveXobject("Msxml12.XMLHTTP");//使用較新版本的 IE 創(chuàng)建 IE 兼容的對(duì)象(Msxml2.XMLHTTP)。

}catch(e){

 try{

 xmlhttp=ActiveXobject("Microsoft.XMLHTTP");//使用較老版本的 IE 創(chuàng)建 IE 兼容的對(duì)象(Microsoft.XMLHTTP)。

}catch(failed){

  xmlhttp=false;//如果失敗了還保持false

}

}

}

return xmlhttp;

}

判斷是否成功的例子:

if(!xmlhttp){

 創(chuàng)建xmlhttp失敗

}else{

 創(chuàng)建xmlhttp成功

}

第二種方法:
 if(typeof(XMLHttpRequest)=="undefined" && window.ActiveXObject){

 function XMLHttpRequest(){

 var xmlhttp_arr=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

 var xmlhttp;

 for(i=0;i<xmlhttp_arr.length;i++){

  if(xmlhttp=new ActiveXObject(xmlhttp_arr[i]))

  break;

}

 return xmlhttp;

}

}

//這個(gè)是除了IE之外的瀏覽器創(chuàng)建XMLHttpRequest對(duì)象

var xmlhttp=new XMLHttpRequest();

創(chuàng)建xmlhttp成功后,然后再來(lái)看看它的一些屬性和方法吧,還有最重要的onreadystatechange事件句柄

 方法:

 open() 初始化http請(qǐng)求參數(shù),包括URL和http方法,但是不發(fā)送請(qǐng)求;

 abort() 取消當(dāng)前響應(yīng),關(guān)閉連接并斷開(kāi)所有網(wǎng)絡(luò)未結(jié)束的活動(dòng);

 getAllResponseHeaders() 把http響應(yīng)頭部作為未解析字符串返回;

 getResponseHeaders) 返回指定的http響應(yīng)頭的值;

 send() 發(fā)送http請(qǐng)求使用傳遞給open()方法的參數(shù),以及傳個(gè)該方法的可選請(qǐng)求體;

 setResponseHeader() 向一個(gè)打開(kāi)但沒(méi)有發(fā)送的請(qǐng)求設(shè)置或添加一個(gè)Http請(qǐng)求。

 屬性:

 readyState 說(shuō)明http請(qǐng)求的狀態(tài);(有5個(gè)狀態(tài)分別是

 0 表示沒(méi)有初始化;

 1 表示讀取中

 2 表示已讀取

 3 交互中(接受中)

 4 完成

)

 responseText 說(shuō)明為服務(wù)器接收到得響應(yīng)體,如果沒(méi)有接收到數(shù)據(jù)就返回空字符串;

 responseXML 說(shuō)明對(duì)請(qǐng)求的回應(yīng) 解析為XML并用document對(duì)象返回;

 status 說(shuō)明http請(qǐng)求的狀態(tài);

 statusText 說(shuō)明http請(qǐng)求狀態(tài)不是以數(shù)字形式而是用名稱(chēng);

 onreadystatechange 是readySate狀態(tài)改變時(shí)調(diào)用事件的函數(shù)。

下面是一個(gè)發(fā)送請(qǐng)求數(shù)據(jù)并返回結(jié)果的xmlhttpRequest對(duì)象;

 生成一個(gè)XMLHTTPRequest對(duì)象

var xmlhttp=CreatXMLHttp();
 

xmlhttp.open("get","https://www.jb51.net/jaryle",true);
 

xmlhttp.onReadyStateChange=getresult;
//怎么告訴XMLHttpRequest 對(duì)象狀態(tài)變化時(shí)讓誰(shuí)來(lái)處理這個(gè)變化呢用到二種方法:一種是匿名方法xmlhttp.onReadyStateChange=function(){處理變化的代碼}
另一種方法:指定方法:xmlhttp.onReadyStateChange=getresult;
 

function getresult(){處理變化的代碼}
 

xmlhttp.send();
 

function getresult(){
 

if(xmlhttp.readyState==4){ //當(dāng)readyState的狀態(tài)等于4時(shí)表示接收到數(shù)據(jù)
 

if(xmlhttp.status==200){ //這個(gè)時(shí)候就需要用到status屬性,即由服務(wù)器返回的 HTTP 狀態(tài)代碼。 xmlhttp.status 等于200時(shí)表示傳輸過(guò)程完整沒(méi)有錯(cuò)誤
 

alert(xmlhttp.responseText);
}
}
 

}

注意:所以我們應(yīng)該按照上面的流程來(lái)記憶:創(chuàng)建XMLHttpRequest 對(duì)象 -> 指定發(fā)送地址及發(fā)送方法 -> 指定狀態(tài)變化處理方法 -> 發(fā)送請(qǐng)求,請(qǐng)求發(fā)送后狀態(tài)變化了就會(huì)自動(dòng)調(diào)用指定的處理方法。

看完上述內(nèi)容,你們對(duì)ajax核心XMLHTTPRequest對(duì)象的創(chuàng)建與瀏覽器的兼容問(wèn)題是怎樣的有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI