无法获得json数据,类别不足

时间:2012-09-26 13:31:04

标签: jquery json getjson

lemme描述情况,有一个json数据给出了不同航空公司的航班信息,有价格,日期,一切,但我无法以我想要的方式获得我需要的信息。因此,它来了:

我还有一个关于json数据回调的新手问题,到目前为止,我可以在Yograj Gupta的帮助下获得json列表数据中的航空公司名称列表,其结构类型为:http://vteem.net/json.json,这里是代码:

$.getJSON("http://api.anywayanyday.com/api/NewRequest/?Route=2406MOWLON&AD=1&CN=0&CS=E&Partner=testapic&_Serialize=JSON&callback=?", function(data) {
        var code=data.Id;
        $.getJSON("http://api.anywayanyday.com/api/Fares/?R="+code+"&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?", function(data) {
            var items = [];
            $.each(data, function(key, val) {
                if(val && (typeof val == 'object' || typeof val == 'array')){
                    if(key == "Airlines"){
                        var airlineNames = [];
                        for(var x in val)
                            airlineNames.push(val[x].Name);
                        items.push(airlineNames.join('<br/>'));
                    }
                }
            });
            $('<div/>', {
                'id': 'airlines',
                html: items.join('')
            }).appendTo('#data');
        });
    });

我想获得每个航空公司行内的总金额值,另外,是否可以按总价格价值对其进行排序?

谢谢大家的帮助,我真的很感激!

更新代码:

$.getJSON("http://api.anywayanyday.com/api/NewRequest/?Route=2406MOWLON&AD=1&CN=0&CS=E&Partner=testapic&_Serialize=JSON&callback=?", function(data) {
        var code=data.Id;
        $.getJSON("http://api.anywayanyday.com/api/Fares/?R="+code+"&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?", function(data) {
            var items = [];
            $.each(data, function(key, val) {
                if(val && (typeof val == 'object' || typeof val == 'array')){
                    if(key == "Airlines"){
                        var airlineNames = [];
                        for(var x in val)
                            airlineNames.push(val[x].Name);
                        items.push(airlineNames.join('<br/>'));

                        $.each(data, function(key, val) {
                            if(val && (typeof val == 'object' || typeof val == 'array')){
                                if(key == "FaresFull"){
                                    var totalAmounts = [];
                                    for(var y in val)
                                        totalAmounts.push(val[y].TotalAmount);
                                    items.push(totalAmounts.join('<br/>'));
                                }
                            }
                        });                     
                    }
                }
            });
            $('<div/>', {
                'id': 'airlines',
                html: items.join('')
            }).appendTo('#data');
        });
    });

1 个答案:

答案 0 :(得分:1)

我无法完全理解你要做什么......但你的脚本中有一些错误。主要是:$.each(data, function(key, val) {。从此jsonp请求传递的数据不是数组。这是对象。该对象具有属性:Airlines。因此,如果您想迭代抛出所有航空公司,您应该使用data.Airlines。如果主要任务是打印出所有航空公司名称,则此脚本将起作用:

$.getJSON("http://api.anywayanyday.com/api/NewRequest/?Route=2406MOWLON&AD=1&CN=0&CS=E&Partner=testapic&_Serialize=JSON&callback=?", function(data) {
    var code=data.Id;
    $.getJSON("http://api.anywayanyday.com/api/Fares/?R="+code+"&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?", function(data) {
        var airlineNames = [];
        $.each(data.Airlines, function() {                  
                airlineNames.push(this.Name);
        });
        $('<div/>', {
            'id': 'airlines',
            html: airlineNames.join(',')
        }).appendTo('#data');
    });
});​

希望它能帮到你。

<强>更新

没问题)但是代码中的主要问题是第二次再次迭代所有json数据(循环中循环)。这不是最好的解决方案。我为你写了一些演示。请检查一下:DEMO。正如我理解你的要求,它应该成功... 演示代码:

$.getJSON("http://api.anywayanyday.com/api/NewRequest/?Route=2406MOWLON&AD=1&CN=0&CS=E&Partner=testapic&_Serialize=JSON&callback=?", function(data) {
var code=data.Id;
$.getJSON("http://api.anywayanyday.com/api/Fares/?R="+code+"&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?", function(data) {
    var pricesForEachAirline = [];
    $.each(data.Airlines, function() { 
        var item = { name : this.Name, prices : []};            
        for(var y in this.FaresFull)
        {
            item.prices.push(this.FaresFull[y].TotalAmount);
        }
           pricesForEachAirline.push(item);
    });
    $.each(pricesForEachAirline , function(){
        $('#data').append(this.name, this.prices.join(',')).append('</br>')
    }); 
});

});