【问题标题】:Create variables for getJSON response为 getJSON 响应创建变量
【发布时间】:2023-03-25 07:15:01
【问题描述】:

我对 Javascript 和 JQuery 非常陌生,我一直在尝试不同的方法来提取和操作 yahoo 财务数据,并决定使用 jquery。我的第一个基本尝试是这样的:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env" + "?callback=?", function(json) {

var lastprice = json[0].results.quote.LastTradePriceOnly

console.log(lastprice)

它不起作用,错误控制台也没有任何帮助。我在这里搜索并发现了这个问题: load json into variable 并在考虑可能尚未收到雅虎的回复后尝试了此操作:

var json = (function () {
    var json = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': "http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env",
        'dataType': "json",
        'success': function (data) {
            json = data;
        }
    });
    return json;
})(); 

    var lastprice = json.results.quote.LastTradePriceOnly

    console.log(lastprice)

});

这也是不对的。我觉得我很接近了。任何帮助将不胜感激

【问题讨论】:

    标签: jquery jsonp getjson


    【解决方案1】:

    移除 url 的回调,你会从查询中得到以下 JSON 结果,它不是一个数组而是一个对象。

    {
       "query":{
          "count":1,
          "created":"2012-10-26T19:00:18Z",
          "lang":"en-US",
          "results":{
             "quote":{
                "LastTradePriceOnly":"50.26",
                "Name":"Red Hat, Inc. Com"
             }
          }
       }
    }
    

    您应该通过以下方式访问其数据:

    var lastprice = json.query.results.quote.LastTradePriceOnly;
    

    这是修改后代码的工作演示:DEMO


    编辑(警告)

    我正在测试该调用,我发现有时来自具有相同 URL 的服务的结果会返回以下错误:

    {
       "error":{
          "lang":"en-US",
          "description":"No definition found for Table yahoo.finance.quotes"
       }
    }
    

    【讨论】:

    • 当你打败我的时候,我已经完成了同样的答案。如需参考 OP,请尝试将 url 粘贴到 JSONLint 以检查格式。
    • 非常感谢你们!
    【解决方案2】:

    数据将以这种格式返回:

    {"query":
           {"count":1,"created":"2012-10-26T19:00:42Z","lang":"en-US","results":
              {"quote":
                  {"LastTradePriceOnly":"50.28","Name":"Red Hat, Inc. Com"}}}}
    

    因此必须遍历您返回的对象:data.query.results.quote.LastTradePriceOnly

    >     $.ajax({
    >         'async': false,
    >         'global': false,
    >         'url': "http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?",
    >         'dataType': "json",
    >         'success': function (data) {
    >             alert(data.query.results.quote.LastTradePriceOnly);
    >         }
    >     });
    

    这是一个演示它的 jsfiddle: http://jsfiddle.net/erick382/Qghtu/

    【讨论】:

    • 谢谢(因为弄错了路径而感到愚蠢),我尝试通过将结尾更改为这个来添加一个变量(但它不起作用):'success': function (数据){ json = 数据; } var last = data.query.results.quote.LastTradePriceOnly console.log(last) });
    • Hmmmmm... 你看过 jsfiddle 了吗?我知道我简化了它..但它可能会帮助您解决问题..
    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多