Ajax跨域的完美解決方案
公司要做一個活動頁面,在其過程中發(fā)現(xiàn)所有的接口,ajax請求跨域。這里對跨域做個簡單介紹以及提供幾種解決辦法。
由于瀏覽器實現(xiàn)的同源策略的限制,XmlHttpRequest只允許請求當(dāng)前源(域名、協(xié)議、端口)的資源,所以AJAX是不允許跨域的。這里提供自己常用的三種方法:
1、jsonp訪問
JSONP(JSON with Padding)是一個非官方的協(xié)議,它允許在服務(wù)器端集成Script tags返回至客戶端,通過javascript callback的形式實現(xiàn)跨域訪問;
實現(xiàn)方式
1)
<script type="text/javascript"> $.ajax({ url:url, dataType:'jsonp', data:'', jsonp:'callback', success:function(result) { }, }); </script>
2)
$.getJSON(url+"?callback=?", function(result) { });
注:1】 jsonp只能用get請求,哪怕你用了post請求,也會自動給你轉(zhuǎn)換成post;
2】 jsonp 不僅可以用來獲取數(shù)據(jù),也可以用來提交數(shù)據(jù)。
2、damain 方法
在主域相同,子域不同的情況下可以用這種方法,修改域名指向,讓他們指向同一域名,這種辦法也只能解決主域相同而二級域名不同的情況,兩個毫無關(guān)系的網(wǎng)址是不可以用這種方法的;
document.domain = 'a.com'
注:在實際開發(fā)中,很多人會在本地調(diào)試接口,localhost的域名和公司的域名完全不一樣,所有用了domain這種辦法也無法產(chǎn)生效果,解決辦法是修改c盤里的host文件,把本地地址localhost修改成公司域名或者公司二級域名,然后這種方法就可以使用了。
下面是修改的域名指向:
#127.0.0.1 localhost
127.0.0.1 公司.com
3、postMessage
postMessage是h5的一個新功能之一,由于我們是一家做h5游戲的公司,不可避免的要嵌套iframe,方便數(shù)據(jù)提交等。
這里假設(shè),iframe的Id為 ‘iframe';
在iframe里面的js里要寫上
var message = 'date';<br>if (parent.document.getElementById(‘iframe‘)) { //捕獲iframe var iframe = parent.document.getElementById(‘iframe').contentWindow; //發(fā)送消息 parent.postMessage(message, "*"); }
在iframe外面的js里要寫上
window.addEventListener('message',function(e){ },false);
然后就可以拿到message的數(shù)據(jù)了。
以上所述是小編給大家介紹的Ajax跨域的完美解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Ajax初試之讀取數(shù)據(jù)篇實現(xiàn)代碼
上次我們講了ajax開始準(zhǔn)備篇,做好了基本的ajax準(zhǔn)備工作以后.我們開始牛刀小試一下:ajax初試之讀取數(shù)據(jù)篇.2010-10-10history保存列表頁ajax請求的狀態(tài)使用示例詳解
這篇文章主要為大家介紹了history保存列表頁ajax請求的狀態(tài)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12Ajax客戶端異步調(diào)用服務(wù)端的實現(xiàn)方法(js調(diào)用cs文件)
下面小編就為大家分享一篇Ajax客戶端異步調(diào)用服務(wù)端的實現(xiàn)方法(js調(diào)用cs文件),具有很好的參考價值,希望對大家有所幫助2017-12-12