xhr 请求控制源

Posted

技术标签:

【中文标题】xhr 请求控制源【英文标题】:xhr request Control Origin 【发布时间】:2014-09-12 10:57:42 【问题描述】:

我正在尝试获取 xhr 请求。 (脚本应该每 2 秒循环运行一次) 这是我的脚本:

function getJson() 
            var xhr = new XMLHttpRequest();
            xhr.open("get", "http://www.oref.org.il/WarningMessages/alerts.json", true);
            xhr.onload = function()
                var response = JSON.parse(xhr.responseText);
                checkJson(response);
            
            xhr.send(null);

            setTimeout(arguments.callee, 2000);


getJson();

我收到此错误:XMLHttpRequest cannot load http://www.oref.org.il/WarningMessages/alerts.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://klh-dev.com' is therefore not allowed access.

所以我在网上搜索并尝试在脚本中添加几行,但没有奏效: response.addHeader("Access-Control-Allow-Origin", "http://www.oref.org.il/WarningMessages");

response.addHeader("Access-Control-Allow-Origin", "*");

我在外部 html 页面中尝试了这个

header('Access-Control-Allow-Origin: *');  

没有任何效果..

【问题讨论】:

@MikeBell 说的是真的。这些标头必须在服务器端设置,而不是客户端。 【参考方案1】:

您遇到了一组统称为跨域资源共享 (CORS) 的问题。长话短说,浏览器通常不允许脚本访问不是脚本来源的服务器,除非服务器明确允许。由于您的脚本来源http://klh-dev.com 与请求目标http://www.oref.org.il 不同,因此浏览器正在阻止该请求。

有两种可能的解决方案:1)修改服务器以实现 CORS 标头(除非您控制服务器,否则可能不可能)或 2)使用 JSONP 执行请求(并非在所有情况下都有效)。 So, JSONP or CORS?

【讨论】:

以上是关于xhr 请求控制源的主要内容,如果未能解决你的问题,请参考以下文章

在 Chrome 中捕获 XHR / Ajax 请求

控制台测试ajax

chrome控制台一些比较实用的操作

加载外部数据时,控制台提示:XHR 完成加载

对文件发出 json/jsonp xhr 请求:协议

Mini2440裸机开发之中断控制器