0%

跨域及其解决办法

3


什么是跨域

因为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等等
可以参考:简书文章