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');
});
});
答案 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>')
});
});
});