什么是跨域
因为javascript的同源策略的限制,JS不能够操作另一个域名下的对象
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:8000/a.js
http://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
同一域名,不同二级域名(同上)
不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名
不允许
那么我们想用ajax去跨域是不可能的,ajax的xhr对象是无法拿到数据,但是有一种方法,凡是有src属性的其实都可以跨域,jsonp就是其中一种非标准的传输规范,它可以跨域。需要注意的是,我们用jsonp的话,其实就和ajax半毛钱的关系都没有了,原理完全不是一样的,我们用jsonp的话,相当于动态创建了一个script标签,使用script的src属性去请求,再通过回调函数把数据带回来,例如获取豆瓣api为例
另外可以实现跨域的方法有很多,比如服务器代理php的header()、window.name、document.domain等等
可以参考:简书文章