来自 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¤cy=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 以获得可能的解决方案!
我有这段代码试图从 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¤cy=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 以获得可能的解决方案!