【问题标题】:Issue with JSON.parse() from URL来自 URL 的 JSON.parse() 问题
【发布时间】:2019-01-01 19:30:43
【问题描述】:

我有这段代码试图从 Bloomberg 获取价格,但我无法让它工作。

这是网址:

https://www.bloomberg.com/markets2/api/intraday/BACHOCOB:MM?days=1&interval=2&volumeInterval=15

还有我的失败代码:

<p id="quote"></p>

<script>
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var price= JSON.parse(this.responseText);
            document.getElementById("quote").innerHTML = price[0]["previousClosingPriceOneTradingDayAgo"];
        }
    };
    xmlhttp.open("GET", "https://www.bloomberg.com/markets2/api/intraday/BACHOCOB:MM?days=1&interval=2&volumeInterval=15&currency=MXN", true);
    xmlhttp.send();
</script>

提前致谢。

【问题讨论】:

标签: javascript json html xml-parsing bloomberg


【解决方案1】:

您收到的 excat 错误消息是什么?是否类似于“请求的资源上不存在'Access-Control-Allow-Origin'标头”?

如果是这样,那与 JSON.parse 无关,因为它是针对 XSS(跨站点脚本)的安全措施。如果服务器未明确允许,您将无法从其他域请求 Web 响应。

更多信息请参见https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

作为附加说明:您可以解决此问题。即使您无法访问服务器,您也可以使用代理服务器,它会为您获取请求并使用适当的响应标头来允许您的脚本做出响应。一个例子是来自 npm 的“corsproxy”(没有经验。只是一个快速的谷歌搜索)。

【讨论】:

  • 您好;事实上,我没有收到任何回应,只是一个空白网页。
  • 是的,我将您的代码粘贴在小提琴中:jsfiddle.net/v856fws9 并弹出了跨域问题。您可以在浏览器的开发人员控制台中看到它。像 Dev-Tools->jS-Console 这样的东西。取决于您的特定浏览器。对于初学者来说,CORS/Cross-Origin 并不是一个简单的问题。尝试阅读它。
  • 如果此答案对您有所帮助并回答了您的问题,请考虑对其进行投票并将其标记为已接受的答案。谢谢
【解决方案2】:

您可以通过将jQuery 添加到您的项目中来获得如下价值

$.ajax({
    type: "GET",
    url: "https://www.bloomberg.com/markets2/api/intraday/BACHOCOB:MM?days=1&interval=2&volumeInterval=15",
    dataType: "json",
    success: function(getPrice) {
        $('#quote').append(getPrice[0].previousClosingPriceOneTradingDayAgo);
    }
});

【讨论】:

    【解决方案3】:

    似乎 CORS 是个问题。由于您对 SSL URL 使用 GET 请求,因此它希望您从 HTTPS 源发送此请求。要测试您的脚本,请使用安装了 CORS 扩展的 Chrome 浏览器。你会看到结果的。

    简而言之,您需要一个 HTTPS 源 URL,如果 SSL 是一个问题,您可能想尝试使用 PHP 的 CURL 以获得可能的解决方案!

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2013-07-06
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多