使用jQuery .ajax函数从嵌套的JSON对象中检索值

时间:2013-10-09 02:01:26

标签: jquery ajax json typeerror

假设我有一个从不同域返回的JSON对象,如下所示(这最初包含相当大的数据量,所以我省略了不相关的部分,同时保持其结构完整):

{
    "query": {
        "count": 1,
        "created": "2013-10-08T21:06:49Z",
        "lang": "en-US",
        "results": {
            "quote": {
                "symbol": "GOOG",
                "Ask": "854.63",
                "AverageDailyVolume": "1837530",
                "PreviousClose": "865.74"
            }
        }
     }
 }

虽然我觉得使用JSON相当舒服,但我只是开始学习jQuery .ajax函数与JSON交互的细节。我写了非常基本的代码(下面),以确保我可以检索JSON对象并从中提取一个或多个值:

$.ajax({
    type: "get",
    cache: false,
    dataType: "jsonp",
    url: "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in ('" + source + "') &format=json&diagnostics=true&env=http://Fdatatables.org/alltables.env&callback=?",
    success: function(data) {
        console.log(data.query.results.quote.symbol); // expected output is "GOOG"
    }
});

当我在Firefox中运行上面的代码时,我在浏览器控制台中出现TypeError: data.query is undefined错误。我注意到已经发布了几个类似于我在这里提出的问题,但没有找到足以解决这个问题的任何问题 - 至少从我的理解来看。

任何建议/提示将不胜感激。

3 个答案:

答案 0 :(得分:0)

我认为你的问题与环境有关。 Fdatatables.org不是有效的环境。

更改

env=http://Fdatatables.org/alltables.env&callback=?

env=http://datatables.org/alltables.env&callback=?

<强> Fiddle

答案 1 :(得分:0)

您可能想尝试一下:

success: function(data) {
        console.log($.parseJSON(data).query.results.quote.symbol); 
}

希望有所帮助。

答案 2 :(得分:0)

将您的网址更改为:

http://query.yahooapis.com/v1/public/yql?
    q=select * from yahoo.finance.quotes where symbol in
    ('GOOG')
    &format=json
    &diagnostics=true
    &env=http://datatables.org/alltables.env

为了格式化,我试图说清楚。实际网址是

http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20yahoo.finance.quotes%20where%20symbol%20英寸%20( '歌')%20安培;格式= JSON&安培;诊断=真安培; ENV = http://datatables.org/alltables.env