Google财经JSON回复无法在Chrome,Firefox中使用,但可在IE 11中使用

时间:2016-08-11 14:55:34

标签: javascript json xmlhttprequest google-finance

我正在构建一个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" } ]

我也试过雅虎财经网址。同样的问题也是如此。这是我的网址

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=

这是我的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。*

2 个答案:

答案 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']