首頁  >  文章  >  web前端  >  如何實作Javascript跨域請求程式碼詳解

如何實作Javascript跨域請求程式碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-20 11:39:221497瀏覽

什麼情況下才會出現跨域

假設網域是:http://www.php.cn
如果所要求的網域跟這個網域不致,這種情況就是跨域,由於跨域有漏洞,所以一般來說正常的跨域請求方式是請求不到的。
解決方式:
一、window.name
1、 伺服器回傳 

<script>window.name=&#39;{"id":"3", "name":"leisure"}&#39;;</script>

2、定義一個iframe,新增onload事件< ;iframe id="iframe1" onload="iLoad">d5ba1642137c3f32f4f4493ae923989c

<script type="text/javascript"> 
var load = false; 
function iLoad() { 
if(load == false) { 
// 同域处理,请求后会再次重新加载iframe 
document.getElementById(&#39;iframe1&#39;).contentWindow.location = &#39;/&#39;; 
load = true; 
} else { 
// 获取window.name的内容,注意必须进行同域处理后方可访问! 
var data = document.getElementById(&#39;iframe1&#39;).contentWindow.name; 
alert(data); // {"id":"3", "name":"leisure"} 
load = false; 
} 
} 
</script>

3、定義一個form,設定form的target為iframe的id,然後提交form 

<form action="url" method="POST" target="iframe1"> 
<button type="submit" value="submit" /> 
</form>


二、JSONP
伺服器回傳callback({"id": "3", "name": "leisure" }); 

<script type="text/javascript"> 
function callback(data) { 
alert(data); 
} 
</script> 
<script type="text/javascript" src="http://www.php.cn/product.jsp?id=5&jsonp=callback"></script>


三、jQuery.getJSON
伺服器傳回json格式資料test({"id": "3", "name": "leisure" }); test函數名為callback參數中定義 

$.getJSON(url + "?callback=?", data, function(data) { 
}

注意callback=?這個參數必須帶上,jquery會自動產生一個函數名稱來取代這個問號! jQuery.getJSON其實是用了JSONP方式實作。

四、flash跨域
伺服器新增crossdomain.xml
http://www.php.cn/ crossdomain.xml

<?xml version="1.0"?> 
<cross-domain-policy> 
<allow-access-from domain="*.another.com.cn" /> 
</cross-domain-policy>


#

以上是如何實作Javascript跨域請求程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn