[CORS]:“ Access-Control-Allow-Origin”不允许获取跨域JSON?

时间:2018-06-20 15:39:48

标签: javascript html json cross-domain

实际上,我想从此url获取一个JSON对象, 我尝试在JavaScript中使用XMLHttpRequest(),但控制台记录了此错误:[CORS] The origin 'http://localhost' did not find 'http://localhost' in the Access-Control-Allow-Origin response header for cross-origin resource at 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN'.

但是当我在浏览器地址栏中键入url时,它已正确加载!看截图! enter image description here

查看我的JavaScript代码:

    <script>
        var url='http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN';
        var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
  var status = xhr.status;
  if (status === 200) {
    callback(null, xhr.response);
  } else {
    callback(status, xhr.response);
  }
};
xhr.send();
};
getJSON('http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN', 
function(err, data) {
  if (err !== null) {
    alert('Something went wrong: ' + err);
  } else {
    console.log(data);
  }
});

        </script>

注意:我无法控制服务器。

3 个答案:

答案 0 :(得分:3)

您可以在此处查看有关CORS的信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

对于您的问题,您可以通过https://cors.io之类的服务代理请求来解决。例如,在控制台中运行以下命令:

fetch('https://cors.io?http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN')
.then(res => res.json())
.then(data => console.log(data))

请记住,这不是理想的解决方案,因为在这种情况下,您的代码将依赖于第三方服务。某些个人住宅项目可以,但大型企业则不能。

答案 1 :(得分:2)

您可以在网址中添加https://而不是http://。这样可以解决您的问题。

您还可以使用以下方式打开Chrome浏览器

chrome.exe --allow-file-access-from-files --disable-web-security

在Windows运行中。

答案 2 :(得分:0)

在使用S3存储桶的AWS无服务器游戏时,出现此错误。在S3 / bucketname / permission / CORSconfiguration中添加以下内容之后:

<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>