Rumah  >  Artikel  >  hujung hadapan web  >  如何实现Javascript跨域请求代码详解

如何实现Javascript跨域请求代码详解

伊谢尔伦
伊谢尔伦asal
2017-07-20 11:39:221457semak imbas

什么情况下才会出现跨域? 

假设域名是:http://www.php.cn
如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的。
解决方式
一、window.name
1、 服务器返回 

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

2、定义一个iframe,添加onload事件 50318cb13aed273048303d99b1ee1540d5ba1642137c3f32f4f4493ae923989c

<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>


Atas ialah kandungan terperinci 如何实现Javascript跨域请求代码详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn