1.什么情况下会跨域?
说明:协议名、域名、端口号任何不同,都会跨域
URL | 说明 | 是否允许通信 |
---|---|---|
http://www.a.com/a.js 和 http://www.a.com/b.js | 同一域名下 | 允许 |
http://www.a.com/lab/a.js 和 http://www.a.com/script/b.js | 同一域名下不同文件夹 | 允许 |
http://www.a.com:8080/a.js 和 https://www.a.com/b.js | 同一域名不同端口 | 不允许 |
http://www.a.com/a.js 和 https://www.a.com/b.js | 同一域名不同协议 | 不允许 |
http://www.a.com/a.js 和 http://70.32.92.74/b.js | 域名和域名对应IP | 不允许 |
http://www.a.com/a.js 和 http://script.a.com/b.js | 主域相同,子域不同 | 不允许 |
http://www.a.com/a.js 和 http://a.com/b.js | 同一域名,不同二级域名 | 不允许 |
http://www.cnblogs.com/a.js 和 http://www.a.com/b.js | 不同域名 | 不允许 |
2.解决方案
$.ajax({
url: "url地址",
type: 'get',
dataType: 'jsonp',
jsonp: "callback",
jsonpCallback:"jsonpCallback",//与后台返回的名称必须相同
success: function (data) {
console.log(data);
},
error:function(error){
console.log(error);
}
});
function jsonpCallback(data){
console.log(data);
}
3.解释说明
1.这里jsonpCallback(可以自定义,但是得和*服务器返回的名称*保持一致)。
3.所以你只需在定义一个名为jsonpCallback 的function,请求成功后会调用这个函数。
4.jsonpCallback的function,写在调用ajax的函数之外。
5.后台返回的数据,要用回调函数包起来。
本来返回的数据:[{name:"zhangsan",age:18}]
使用jsonp请求后:jsonpCallback([{name:"zhangsan",age:18}])