我正在构建一个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请求,仍然responseText是空的。
xhr.open('GET',“http://ipinfo.io/json”,true);
不确定出了什么问题。 同样在Chrome中,我将readyState设为1,状态为0, 在Internet Explorer中,我准备好了4,状态为200。*
答案 0 :(得分:1)
此过程存在多个问题。第一个问题是您尝试异步请求XMLHttpRequest数据,但不是这样处理它。第二个问题是,当您实际发出请求时,如果您尝试在浏览器内的客户端上运行此请求,则会遇到同源策略的问题。返回的JSON还有另一个问题,因为它无效。它附加了两个正斜杠,这使得返回的JSON数据的解析错误。
function getJSONReply(stock) {
var url = "https://finance.google.com/finance/info?q=nasdaq:";
var request = url.concat(stock);
window.alert(request);
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", reqListener);
xhr.open('GET', request, true);
xhr.send();
}
function reqListener() {
console.log(this.responseText);
}
console.log(getJSONReply("AAPL"));

解决方案:自Google Finance API is no longer available以来,您可以尝试another Stackoverflow post中提到的其他API。
工作示例:
function getJSONReply() {
var url = "http://ipinfo.io/json";
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", reqListener);
xhr.open('GET', url, true);
xhr.send();
}
function reqListener() {
console.log(this.responseText);
}
getJSONReply();

答案 1 :(得分:0)
为什么不制作一个负责检索数据的PHP脚本?
您的Ajax将使用args select aa.AccNumber, aa.AccName, count(ProductID) as Products
from vProducts pr
left join vAllAccounts aa with (nolock)
on aa.AccountID = pr.AccountID
group by aa.AccNumber, aa.AccID, aa.AccName
order by Products desc
调用此页面
来自雅虎的结果很糟糕,所以我清除它并且它将起作用
GET['qparams']