0

让我描述一下情况,有一个 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');
        });
    });
4

1 回答 1

1

我无法完全理解您将要做什么...但是您的脚本中有一些错误。主要的是:$.each(data, function(key, val) {。从此 jsonp 请求传递的数据不是数组。是对象。此对象具有属性:Airlines。所以,如果你想迭代 throw all 航空公司,你应该使用 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>')
    }); 
});

});​</p>

于 2012-09-26T13:56:47.700 回答