溫馨提示×

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

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

javascript中Ajax跨域的方法

發(fā)布時(shí)間:2022-03-03 10:38:32 來源:億速云 閱讀:108 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“javascript中Ajax跨域的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“javascript中Ajax跨域的方法”吧!

ajax技術(shù)能夠向服務(wù)器請(qǐng)求額外的數(shù)據(jù)而無須卸載頁(yè)面,會(huì)帶來更好的用戶體驗(yàn)。

XMLHttpRequest 對(duì)象

Ajax 技術(shù)的核心是 XMLHttpRequest 對(duì)象(簡(jiǎn)稱 XHR )

創(chuàng)建 XHR 對(duì)象

var xhr = new XMLHttpRequest();

XHR的用法 

要調(diào)用的第一個(gè)方法是 open() ,它接受 3 個(gè)參數(shù):要發(fā)送的請(qǐng)求的類型("get" 、 "post" 等)、請(qǐng)求的 URL 和表示是否異步發(fā)送請(qǐng)求的布爾值。

xhr.open("get", "example.php", false);

xhr.send(null);

這里的 send() 方法接收一個(gè)參數(shù),即要作為請(qǐng)求主體發(fā)送的數(shù)據(jù)。如果不需要通過請(qǐng)求主體發(fā)送數(shù)據(jù),則必須傳入 null ,因?yàn)檫@個(gè)參數(shù)對(duì)有些瀏覽器來說是必需的。調(diào)用 send() 之后,請(qǐng)求就會(huì)被分派到服務(wù)器。

在收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充 XHR 對(duì)象的屬性,相關(guān)的屬性簡(jiǎn)介如下。

responseText:作為響應(yīng)主體被返回的文本。

responseXML:如果響應(yīng)的內(nèi)容類型是"text/xml"或"application/xml",這個(gè)屬性中將保存包含著響應(yīng)數(shù)據(jù)的 XML DOM 文檔。

status:響應(yīng)的 HTTP 狀態(tài)。

statusText:HTTP 狀態(tài)的說明。

xhr.open("get", "example.txt", false); 

xhr.send(null); 

if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 

 alert(xhr.responseText); 

} else { 

 alert("Request was unsuccessful: " + xhr.status); 

}

像前面這樣發(fā)送同步請(qǐng)求當(dāng)然沒有問題,但多數(shù)情況下,我們還是要發(fā)送異步請(qǐng)求,才能讓 JavaScript 繼續(xù)執(zhí)行而不必等待響應(yīng)。此時(shí),可以檢測(cè) XHR 對(duì)象的 readyState 屬性,該屬性表示請(qǐng)求/響應(yīng)過程的當(dāng)前活動(dòng)階段。這個(gè)屬性可取的值如下。

0:未初始化。尚未調(diào)用 open()方法。

1:?jiǎn)?dòng)。已經(jīng)調(diào)用 open()方法,但尚未調(diào)用 send()方法。

2:發(fā)送。已經(jīng)調(diào)用 send()方法,但尚未接收到響應(yīng)。

3:接收。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)。

4:完成。已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。

var xhr = createXHR(); 

xhr.onreadystatechange = function(){ 

 if (xhr.readyState == 4){ 

 if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ 

 alert(xhr.responseText); 

 } else { 

 alert("Request was unsuccessful: " + xhr.status); 

 } 

 } 

}; 

xhr.open("get", "example.txt", true); 

xhr.send(null);

function createXHR(){ 

 if (typeof XMLHttpRequest != "undefined"){ 

 return new XMLHttpRequest(); 

 } else if (typeof ActiveXObject != "undefined"){ 

 if (typeof arguments.callee.activeXString != "string"){ 

 var versions = [ "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", 

 "MSXML2.XMLHttp"], 

 i, len; 

 for (i=0,len=versions.length; i < len; i++){ 

 try { 

 new ActiveXObject(versions[i]); 

 arguments.callee.activeXString = versions[i]; 

 break; 

 } catch (ex){ 

 //跳過

 } 

 } 

 } 

 return new ActiveXObject(arguments.callee.activeXString); 

 } else { 

 throw new Error("No XHR object available."); 

 } 

}

到此,相信大家對(duì)“javascript中Ajax跨域的方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. ajax跨域之jsonp
  2. ajax跨域

免責(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