1. 域的组成5.跨域问题 - 图2

2. 什么叫跨域

简单来说就是 A 网站du的 javascript 代码试图访问 B 网站,包括提交内zhi容和获取内容。
当协议,子域名,主域名,端口号,任意一个不同时,就算作不同的域。

  • 不同域之间请求资源就算做跨域。
  • Javascript出于安全性的考虑,不允许跨域调用其他页面的对象。简单理解就是因为Javascript同源策略的限制,a.com域名下的js无法操作b.com域名下的对象。

跨域问题是由于javascript语言安全限制中的同源策略造成的。同源策略是由Netscape提出的一个著名的安全策略。 现在所有支持JavaScript 的浏览器都会使用这个策略。同源策略阻止从一个域上加载的脚本去获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这说明浏览器隔离来自不同源的内容,以防止它们之间的操作。所谓同源是指域名,协议,端口均相同。

判断是否跨域的实例:
5.跨域问题 - 图3

3. 怎么解决跨域的问题

3.1 用jsonp实现跨域

jsonp是一个简单高效的跨域方式,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。特点:不受同源策略的限制,兼容性更好,易于实现,只支持get。

  1. $.ajax({
  2. type:"method",//这个端口不允许跨域访问
  3. url:"",
  4. dataType:"jsonp",//写json不行,用jsonp就可以了
  5. jsonp:"callback",
  6. success:function(data){
  7. },
  8. error:function(xhr){
  9. console.log(xhr.status)
  10. }
  11. })

3.2 服务器的解决方案

5.跨域问题 - 图4

3.3 js中script标签不受同源策略的影响也可以实现跨越

通俗的讲,就是用script访问链接的时候是不受限制的,所以我们可以利用这个特性来使用它。

var script = document.createElement("script");
        script.src = "http://api.douban.com/v2/movie/subject/1764796?&callback=handleResponse";
        document.body.prepend(script);
        function handleResponse(res) {
            // 对response数据进行操作代码
            console.log(res)
        }