Ajax如何進(jìn)行跨域請(qǐng)求?Ajax跨域請(qǐng)求的原理
本文實(shí)例為大家分享了Ajax跨域請(qǐng)求的具體實(shí)現(xiàn)過程,供大家參考,具體內(nèi)容如下
下面我們?cè)诒镜亟▋蓚€(gè)站點(diǎn)演示一下
第一步首先我們?cè)诒镜卮罱ê靡粋€(gè)Apache服務(wù)器;下載地址;
第二步服務(wù)器配置好以后,在本地配置好兩個(gè)虛擬的域名;
第三步我們?cè)贑盤建一個(gè)文件夾命名為”HTML5”;
第四步找到Apache虛擬主機(jī)的配置文件,然后打開配置文件
第五步在第三步建的HTML5文件夾下分別建一個(gè)文件夾a和文件夾b;
第六步修改Apache虛擬主機(jī)的配置文件,如圖
第七步修改一下host文件,添加a和b的網(wǎng)址,通常host文件路徑在C:\Windows\System32\drivers\etc 下
我們?cè)贖TML5/a文件夾下建一個(gè)7.ajax.html文件
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>獲取同域下內(nèi)容</title> <script> window.onload = function() { var oBtn = document.getElementById('btn'); // 忽略IE6 oBtn.onclick = function() { //創(chuàng)建一個(gè)ajax對(duì)象 var xhr = new XMLHttpRequest(); //監(jiān)聽事件 xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { alert(xhr.responseText); } } } xhr.open('get', 'ajax.php', true); xhr.send(); } } </script> </head> <body> <input type="button" value="獲取同域下內(nèi)容" id="btn" /> </body> </html>
我們先看一下同域下的請(qǐng)求
我們?cè)贖TML5/a下建一個(gè)php文件,返回'hello';
這時(shí)候我們?cè)诖蜷_當(dāng)前頁面 http://www.a.com/7.ajax.html ,點(diǎn)擊按鈕我們發(fā)現(xiàn)請(qǐng)求到了數(shù)據(jù);
http://www.a.com/7.ajax.html
但是如果跨域的話,即你所請(qǐng)求的數(shù)據(jù)和當(dāng)前文件不在一個(gè)域下面,這樣的話就會(huì)產(chǎn)生跨域請(qǐng)求,通常在這種情況下就會(huì)禁止你去訪問
例如我們現(xiàn)在將剛才在HTML5/a文件夾下的ajax.php文件放到b文件夾下
這時(shí)候點(diǎn)擊后我們發(fā)現(xiàn)請(qǐng)求報(bào)錯(cuò)了,意思是跨域請(qǐng)求受到了限制
這時(shí)候我們需要后端配合,你需要告訴后端在輸出的時(shí)候加一個(gè)”Access-Control-Allow-Origin”頭信息
比如說:如圖,意思只要是這個(gè)域名的跨域請(qǐng)求就不受跨域策略的影響
這時(shí)候我點(diǎn)擊的時(shí)候,就可以正常獲取跨域的數(shù)據(jù)了
如果你想兼容IE需要
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ajax跨域請(qǐng)求</title> <script> window.onload = function() { /* 在標(biāo)準(zhǔn)瀏覽器下,XMLHttpRequest對(duì)象已經(jīng)是升級(jí)版本,支持了更多的特性,可以跨域了 但是,如果想實(shí)現(xiàn)跨域請(qǐng)求,還需要后端的相關(guān)配合才可以 XMLHttpRequest : 增加很多功能,他也不推薦使用onreadystatechange這個(gè)事件來監(jiān)聽,推薦使用onload */ var oBtn = document.getElementById('btn'); oBtn.onclick = function() { // 這是標(biāo)準(zhǔn)瀏覽器寫法 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { alert(xhr.responseText); } } } xhr.open('get', 'http://www.b.com/ajax.php', true); xhr.send(); /* 如果你想兼容IE瀏覽器,可以特地為IE做兼容,忽略IE6 XDomainRequest : IE如果想實(shí)現(xiàn)跨域請(qǐng)求,則需要使用這個(gè)對(duì)象去實(shí)現(xiàn) var oXDomainRequest = new XDomainRequest(); oXDomainRequest.onload = function() { alert(this.responseText); } oXDomainRequest.open('get', 'http://www.b.com/ajax.php', true); oXDomainRequest.send(); */ } } </script> </head> <body> <input type="button" value="獲取同域下內(nèi)容" id="btn" /> </body> </html>
關(guān)于IE,詳情請(qǐng)?jiān)L問 https://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx
Ajax最新標(biāo)準(zhǔn)請(qǐng)?jiān)L問 https://www.w3.org/TR/XMLHttpRequest2/
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解自定義ajax支持跨域組件封裝
- vue-cli開發(fā)時(shí),關(guān)于ajax跨域的解決方法(推薦)
- ajax跨域獲取網(wǎng)站json數(shù)據(jù)的實(shí)例
- 原生JS實(shí)現(xiàn)ajax與ajax的跨域請(qǐng)求實(shí)例
- 淺談jquery中ajax跨域提交的時(shí)候會(huì)有2次請(qǐng)求的問題
- 原生JS實(shí)現(xiàn)Ajax跨域請(qǐng)求flask響應(yīng)內(nèi)容
- Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解
- 原生js的ajax和解決跨域的jsonp(實(shí)例講解)
- 基于CORS實(shí)現(xiàn)WebApi Ajax 跨域請(qǐng)求解決方法
- AJAX跨域請(qǐng)求數(shù)據(jù)的四種方法(實(shí)例講解)
- 詳解ajax跨域問題解決方案
- ajax前臺(tái)后臺(tái)跨域請(qǐng)求處理方式
相關(guān)文章
Ajax實(shí)現(xiàn)城市二級(jí)聯(lián)動(dòng)(一)
這篇文章主要為大家詳細(xì)介紹了Ajax實(shí)現(xiàn)城市二級(jí)聯(lián)動(dòng)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02js對(duì)ajax返回?cái)?shù)組的處理介紹
本篇文章主要是對(duì)js對(duì)ajax返回?cái)?shù)組的處理進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-02-02ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
在使用ajax過程中,傳遞參數(shù)是在所難免的尤其在特殊情況下傳遞多個(gè)參數(shù),下面與大家分享下具體的是實(shí)現(xiàn)方法,感興趣的朋友可以參考下哈2013-05-05jQuery Validator驗(yàn)證Ajax提交表單的方法和Ajax傳參的方法
這篇文章主要介紹了jQuery Validator驗(yàn)證Ajax提交表單的方法和Ajax傳參的方法,在文中還給大家提到了jquery .ajax提交表單的寫法,具體實(shí)例代碼大家參考下本文2017-08-08ajax用json實(shí)現(xiàn)數(shù)據(jù)傳輸
本文主要介紹了ajax用json實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)姆椒?,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03ajax三級(jí)聯(lián)動(dòng)實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了ajax三級(jí)聯(lián)動(dòng)的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05