2016-02-29 15 views
0

因此,我使用一个名为MarkitOnDemand的公司的API来获取股票数据。从流星中的JSONP中提取数据

服务器端:

Meteor.methods({ 
    'getStockData' : function(tickerSymbol) { 
    check(tickerSymbol, String); 
    this.unblock(); 
    url = "http://dev.markitondemand.com/MODApis/Api/v2/InteractiveChart/jsonp?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A365%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22" + tickerSymbol + "%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D" 
    var response = HTTP.call('GET', url, { 
     params: { 
     "callback" : "lookup" 
     }, 
     headers: { 
     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 
     } 
    }); 
    // console.log(response); 
    if(response.statusCode == 200) { 
     console.log('Success'); 
     return(response.content) 
    } 
    } 
}); 

客户端:

lookup({"Labels":null,"Positions":[0,0.004,0.008,0.012,0.016,0.02,0.024,0.028,0.032,0.036,0.04,0.043,0.047,0.051,0.055,0.059,0.063,0.067,0.071,0.075,0.079,0.083,0.087,0.091,0.099,0.103,0.107,0.111,0.115,0.119,0.123,0.126,0.13,0.134,0.138,0.142,0.146,0.15,0.154,0.158,0.162,0.166,0.17,0.174,0.178,0.182,0.186,0.19,0.194,0.198,0.202,0.206,0.209,0.213,0.217,0.221,0.225,0.229,0.233,0.241,0.245,0.249,0.253,0.257,0.261,0.265,0.269,0.273,0.277,0.281,0.285,0.289,0.292,0.296,0.3,0.304,0.308,0.312,0.316,0.32,0.324,0.328,...... 

现在的问题:在类似下面的

Template.LookupChartTemplate.rendered = function() { 
    stockData = Meteor.call("getStockData", stockname.Symbol, function(error, results){ 
    console.log(results); 
    }); 
} 

客户端的console.log(结果)结果:

如何从我得到的回调结果中获取数据?

预期的最终结果是:

我想从JSONP响应得到所有的键/值对,并将它们分配到不同的变量(这样我就可以把它们传递给highcharts制作图表)。

回答

3

JSONP是一个蹩脚的黑客工作在浏览器中的相同的起源政策。你没有使用浏览器,所以你不需要它。

将网址从/jsonp更改为/json,并且该API会为您提供普通的JSON。

您可以使用JSON.parse

+0

谢谢。我现在决定继续这个想法,同时我更好地理解回调。谢谢。 –

+0

可爱。我没有想到这样的事情_不使用browser_。 – Jai

2

现在你可以看到你得到了JSONP有一个名为lookup(...data...)功能,你必须调用/创建这个函数来提取数据:在highcharts

var lbls, pos; 

function lookup(data){ 
    lbls = data.Labels; 
    pos = data.Positions; 
} 

现在你可以使用lblspos varialbles 。

+0

解析该答复感谢您的回复。因此,假设我从服务器返回到客户端的整个jsonp对象(在这种情况下命名为response),我如何在客户端访问名为lookup的函数? –