在写ajax的请求的时候出现这个提示,请问是怎么回事
已拦截跨源请求:同源策略禁止读取位于 (某网址) 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
浏览器的同源策略会阻止AJAX跨域请求.
比如在当前页面,按F12打开Firebug,在控制台执行:
$.get('http://www.oschina.net','',function(data){console.log(data);});
能够正常获取到数据.
但如果执行:
$.get('http://m.oschina.net','',function(data){console.log(data);});
就会提示"已拦截跨源请求".
这是因为 m.oschina.net 这个域跟当前页面的域名 http://www.oschina.net/question/2827973_2185644 不一样,属于跨域,所以被拦截.
如果要让 m.oschina.net 允许 www.oschina.net 这个域AJAX获取其资源,则 m.oschina.net 需要返回 header('Access-Control-Allow-Origin: http://www.oschina.net'); 这个头给浏览器,告诉浏览器允许这个域名AJAX跨域访问我.
不过主要注意的是,低版本浏览器,比如微软的大毒瘤IE6就不支持(不能识别)Access-Control-Allow-Origin这个头,所以这个方法对垃圾IE6无效.这时你就要想其他方法,比如JSONP:
www.oschina.net 通过script标签来正常访问 m.oschina.net 的资源,这种方式是不会被浏览器阻止的.
这个请求会返回 jsonpCallback({"a":1,"b":2,"c":3,"d":4,"e":5}); 这个JS代码,里面的参数就是域m.oschina.net的数据,这个JS代码就会调用当前页面的自定义的函数jsonpCallback来处理这些数据.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。