来自 URL 的 JSON.parse() 问题

Issue with JSON.parse() from URL

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

这是URL:

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>

提前致谢。

您收到的 excat 错误消息是什么?是不是像"No 'Access-Control-Allow-Origin' header is present on the requested resource"?

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

有关详细信息,请参阅 https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

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

您可以通过将 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);
    }
});

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

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