JS:使用getJSON检索函数中的数据对象

时间:2014-08-08 21:47:53

标签: javascript json get

我似乎无法完成以下工作。我只是想定义一个检索JSON文件的函数,并允许我将它们存储在一个对象中而不需要定义全局变量。

基本上,为什么这样做

///Global
var filesaved=[];

///function
function getQuandlData(subset,datatype,token){
var url = "http://www.quandl.com/api/v1/datasets/"+subset+"/AAPL"_"+datatype+".json?auth_token="+token;
console.log(url);
$.getJSON(url, function(data) {
    filesaved=data; console.log("filesaved as "+subset+"/"+$('#ticker').val().toUpperCase()+"_"+datatype,filesaved)
}); 

///use
getQuandlData("RAYMOND","NET_INCOME_Q",Quandl_auth_token);filesaved.data[0][1]

然而这不是

///function
function gQD(subset,datatype,token){
var fs=[];
var url = "http://www.quandl.com/api/v1/datasets/"+subset+"/AAPL_"+datatype+".json?auth_token="+token;
console.log(url);
$.getJSON(url, function(data) {
    fs=data;
}); return fs;
                            }
///use
gQD("RAYMOND","NET_INCOME_Q",Quandl_auth_token).data[0][1];

变量Quandl_auth_token可以免费从Quandl.com获得,我只想保持私密:o

***这本质上是我的代码,只是与我的实际代码不同的是我更换了" AAPL"使用HTML输入。

***我明白我的问题围绕着异步函数的问题,有没有办法解决这个问题?

***另外gQD的输出(" RAYMOND"," NET_INCOME_Q",Quandl_auth_token)示例是[],

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这是一个异步功能。当你调用gQD时,它会调用$ .getJSON,它会发送一个回调,在将来的某个时刻指定fs=data。在此期间,您的函数返回,fs仍为[]

当回调被调用时,它仍然会分配fs,但现在你不再拥有它了。

此外,您的第二个代码示例中存在一些不一致和拼写错误,例如: gQD vs getQuandlData

您可能想要做的是从回调函数中调用某些内容,因为这是您拥有有效fs的时间点。

我不知道为什么第一个案例应该起作用,除了你在时间上是幸运的。