这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。
如下:常规操作获取不同的域的数据:
var get1 = function() {$.ajax({
url: 'http://api.jisuapi.com/weather/query?appkey=21f4782df8c57e19&city=深圳',
type: 'get',
success: function(data) {
console.log(data);
}
})
}
get1(); //失败 出现跨域提示
跨域解决方案:
一:jsonp
$('button').click(function () {
$.ajax({
url:"http://www.jxntv.cn/data/jmd-jxtv2.html",
dataType:'jsonp',
})
})
function list(data) {
console.log(data)
}
//成功
二.post
$('button').click(function() {
$.post({
url: 'http://www.jxntv.cn/data/jmd-jxtv2.html',
dataType: 'jsonp', // 请求方式为jsonp
jsonpCallback: "onBack", // 自定义回调函数名
data: {}
});
})
function list(data){
console.log(data)
}
//成功
jsonp虽然很简单,但是有如下缺点:
(1)安全问题(请求代码中可能存在安全隐患)
(2)要确定jsonp请求是否失败并不容易
跨域有以下解决办法:
1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域
来源http://blog.csdn.net/joyhen/article/details/21631833