跨域的三种方法总结【代理(后台);JSONP(只支持GET方式);XHR2(请重点参考IE10以下解决方案)】

Javascript出于安全方面的考虑,不允许跨域调用其他页面的对象。

什么是跨域呢?

 当协议,子域名,主域名,端口号任何一个不相同,就是不同域,不同域之间相互访问,就是跨域。

简单地理解就是因为javascript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象。


跨域处理,三种方法:


1、处理跨域方法一 代理

通过在同域名下的web服务器端创建一个代理: 
北京服务器(域名:www.beijing.com) 
上海服务器(域名:www.shanghai.com) 
比如在北京的web服务器的后台(www.beijing.com/proxy-shanghaiservice.php)来调用上海服务器(www.shanghai.com/services.php)的服务,然后再把访问结果返回给前端,这样前端调用北京同域名的服务就和调用上海的服务效果相同了。


2、处理跨域方式二——JSONP(只支持GET请求):

JSONP可用于解决主流浏览器的跨域数据访问的问题。 
在www.aaa.com页面中: 
<script> 
function jsonp(json){ 
alert(json["name"]); 

</script> 
<script src="http;//www.bbb.com/jsonp.js"></script> 
在www.bbb.com页面中: 
jsonp({'name':'xx','age':24})


3、处理跨域的方法三——XHR2:

1、HTML5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能 
2.IE10以下的版本都不支持 
3.在服务器端 
header('Access-Control-Allow-Origin:*'); 
header('Access-Control-Allow-Methods:POST,GET'); 

配合XHR2的IE10以下跨域:
在代码中js加上一句
jQuery.support.cors =true;或者$.support.cors =true;
然后:设置IE浏览器->Internet选项->安全->自定义级别->其他选项下面的->通过源数据:选择“启用”或者“提示”

例如:

//浏览器支持跨域访问 

jQuery.support.cors = true; 
$.ajax({ 
url: "http://www.rj99999.com/Price/ListPrice.html", 
dataType: 'html', 
success: function (data, textStatus) { 

//nowPrice为本页面显示数据控件,#price', data为从其他网站取出名为price的元素。 
$("#nowPrice").text(jQuery('#price', data).html() + "元/克"); 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
$("#nowPrice").text("暂时无法显示"); 
} 
}); 
//实时刷新 

//每60000毫秒/1分钟调用togglecountdowntime()方法。 

setTimeout("togglecountdowntime()", 60000); 

你可能感兴趣的:(Ajax,web前端,安全)