【问题标题】:[CORS]:' Access-Control-Allow-Origin' not allowing to get a cross-domain JSON?[CORS]:'Access-Control-Allow-Origin' 不允许获取跨域 JSON?
【发布时间】:2018-11-29 19:36:39
【问题描述】:

其实,我想从这个 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 时,它加载正确!看截图!

查看我的 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>

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

【问题讨论】:

标签: javascript html json cross-domain


【解决方案1】:

你可以在这里查看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))

请记住,这不是理想的解决方案,因为在这种情况下,您的代码将依赖于第三方服务。这对于一些个人家庭项目来说是可以的,但对于大型公司项目来说却不是。

【讨论】:

  • 代理解决方案帮助了我,我刚刚编写了一个 php 脚本,它从 url 获取 json 并将其上传到我的服务器,并更改了我的 javascript 代码,以便它从我服务器上的 php 文件中获取 json。因此,不包含第 3 方服务。
【解决方案2】:

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

你也可以用

打开你的chrome浏览器
chrome.exe --allow-file-access-from-files --disable-web-security

在 Windows 运行中。

【讨论】:

  • "您可以在 url 中添加 https:// 而不是 http://。这将解决您的问题",这不起作用,我将也可以在手机上使用我的网络应用,所以chrome.exe --allow-file-access-from-files --disable-web-security 也不是一个解决方案。
  • 这肯定会帮助daveceddia.com/…
  • 什么意思? @KRISHNA PATEL,我尝试将 https:// 而不是 http:// 放在 url 中,但这没有用,我们不能这样做 chrome.exe --allow-file-access-from-files --disable-web-security 因为网络应用程序正在手机上运行(android。
【解决方案3】:

我在使用 S3 存储桶玩 AWS 无服务器时收到此错误。在 S3/bucketname/permission/CORSconfiguration 中添加以下内容后:

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

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2019-06-19
    • 2015-06-17
    • 2013-12-09
    • 2013-09-09
    相关资源
    最近更新 更多