【发布时间】:2016-08-11 14:55:34
【问题描述】:
我正在构建一个 JavaScript 应用程序来从 Google Finance API 检索 STOCK 信息。
finance.google.com/finance/info?q=nasdaq:AAPL
如果我将链接复制粘贴到浏览器中,那么我会正确收到 JSON 回复
// [ { "id": "22144" ,"t" : "AAPL" ,"e" : "NASDAQ" ,"l" : "108.51" ,"l_fix" : "108.51" ,"l_cur" : "108.51" ,"s": "0" ,"ltt":"10:48AM EDT" ,"lt" : "Aug 11, 10:48AM EDT" ,"lt_dts" : "2016-08-11T10:48:42Z" ,"c" : "+0.51" ,"c_fix" : "0.51" ,"cp" : "0.47" ,"cp_fix" : "0.47" ,"ccol" : "chg" ,"pcls_fix" : "108" } ]
我也尝试了雅虎财经网址。同样的问题。这是我的网址
这是我的 JS 代码。
var url = "http://finance.google.com/finance/info?q=nasdaq:";
function getJSONReply()
{
var url_req = url.concat(arguments[0]);
alert(url_req);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
alert(xhr.responseText.length);
}
}
xhr.open('GET', url_req, true);
xhr.setRequestHeader('Access-Control-Allow-Headers', '*');
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET');
xhr.addEventListener("load", reqListener);
xhr.send();
}
function reqListener()
{
var sub1 = this.responseText.substring(5,this.responseText.length);
var sub2 = sub1.substring(0, sub1.length - 2);
parse_JSON(sub2);
}
PS: 即使我只是为了测试代码而添加了一个直接的 http 请求字符串,而不是 var request,responseText 仍然是空的。
xhr.open('GET', "http://ipinfo.io/json", true);
不知道出了什么问题。 同样在 Chrome 中,我将 readyState 设为 1,将 status 设为 0, 在 Internet Explorer 中,我的 readystae 为 4,状态为 200。*
【问题讨论】:
-
可能是同源策略?尝试从服务器查询 API,例如
curl,而不是客户端js,看看响应是否不同。附言这个 API 不是被弃用了吗? googlecode.blogspot.com/2011/05/… -
这是一个几乎有效的 JSON,但它有
//将注释掉所有 JSON。我认为这是 Google 所做的一种保护,因为 Finance 没有 API (developers.google.com/finance/?hl=es)。 -
另外:
XMLHttpRequest cannot load https://finance.google.com/finance/info?q=nasdaq:AAPL. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://fiddle.jshell.net' is therefore not allowed access.我建议找到另一个 API stackoverflow.com/questions/10040954/… -
我是 JSON 开发的新手。我尝试使用普通的'ipinfo.io/json'字符串而不是财务谷歌链接,但即便如此我也遇到了同样的问题。这是标准请求和 JSON 回复,应该可以工作。
-
@yuriy636 :我在 IE 中格式化了 responseText 字符串,它正确显示了回复,但在 chrome 中它根本不起作用。我可以在格式化字符串后解析 JSON,但 IE 会显示该原始字符串。 Chrome 只是说响应是空的。
标签: javascript json xmlhttprequest google-finance