2012-09-27 61 views
1

到目前爲止,我做的所有航空公司列表,其價格爲每飛行,現在我想所有關於從JSON名單,這些航班的信息,這裏的任何方式的功能是:不能得到JSON列表數據

第一功能正常工作:

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

第二個不工作正常...

function show_flights() { 
    var id=$('#search_id').attr('rel'); 
    var list = Array.prototype.slice.call(arguments, 0); 
    $.getJSON("http://api.anywayanyday.com/api/Fares/?R="+id+"&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?", function(data) { 
     var dataForEachFlight = []; 
     $.each(data.Airlines, function() { 
      for(var x in this.FaresFull) 
      { 
       if(this.FaresFull[x].FareId in list) 
       { 
        var flight = { from : [], to : []} 
        for(var y in this.FaresFull.Directions.Segments.Trips) 
        { 
         flight.from.push(this.FaresFull.Directions.Segments.Trips.Departure[y].AirportCode); 
         flight.to.push(this.FaresFull.Directions.Segments.Trips.Arrival[y].AirportCode); 
        } 
        dataForEachFlight.push(flight); 
       } 
      } 
     }); 
     $.each(dataForEachFlight , function(){ 
      $('#flights').append(this.from.join(',')).append('</br>'); 
     }); 
    }); 
} 

所以,當我在航空公司點擊我想要得到的信息,它僅是航班,但它給出了這樣的錯誤:this.FaresFull.Directions是undefined和作爲json的例子,我想從中獲取所有信息:http://vteem.net/json.json(這只是例子,原來的u可以從鏈接函數中獲取)

謝謝大家的幫助,我真的很感激!

功能2 UPDATE

function show_flights() { 
var id=$('#search_id').attr('rel'); 
var list = Array.prototype.slice.call(arguments, 0); 
$.getJSON('http://api.anywayanyday.com/api/Fares/?R='+id+'&V=Matrix&VB=true&L=ru&_Serialize=JSON&callback=?', function(data) { 
    var dataForEachFlight = []; 
    $.each(data.Airlines, function() { 
     for(var a in this.FaresFull) 
     { 
      for(var b in this.FaresFull[a].FareId) 
      {  
       if(this.FaresFull[a].FareId[b] in list) 
       { 
        var flight = { from : [], to : []}; 
        for(var c in this.FaresFull[a].Directions[0].Segments[0].Trips) 
        {     
         flight.from.push(this.FaresFull[a].Directions[0].Segments[0].Trips[c].Departure.AirportCode); 
         flight.to.push(this.FaresFull[a].Directions[0].Segments[0].Trips[c].Arrival.AirportCode); 
        } 
        dataForEachFlight.push(flight); 
       } 
      } 
     } 
    }); 
    $.each(dataForEachFlight , function(){ 
     $('#flights').append(this.from.join(',')).append('</br>'); 
    }); 
}); 

}

嘗試#12

現在得到的數據,但重複太多:)一些錯誤在()的條款。

+0

也許這實際上是* *'undefinined',你只需要檢查它的值前手? – DrColossos

+0

您鏈接的文件中的JSON不是正確的JSON。 '({})'不起作用,這個對象內沒有任何屬性,特別是不是你想要的屬性。你的JSON需要顯示爲'[{}]'。 – Ohgodwhy

+0

@DrColossos是的,它是不確定的,因爲我錯誤地寫了代碼,這就是爲什麼我要求幫助 –

回答

2

那麼,我修改了我們最後的solution。但結果並不是最終結果,它只是告訴你如何應對你的問題(它打印出每個航空公司的所有價格和所有相關的出發和到達機場代碼)。你可以找到演示HERE。 代碼:

$.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, infos: []};    

     $.each(this.FaresFull, function() 
     { 
      var info = {departures:[], arrivals:[]}; 
      info.price=this.TotalAmount; 
      $.each(this.Directions, function(){ 
       $.each(this.Segments, function(){ 
      $.each(this.Trips, function() 
      { 
       info.departures.push(this.Departure.AirportCode); 
       info.arrivals.push(this.Arrival.AirportCode); 
      }); 
        }); 
     }); 
      item.infos.push(info); 
     }); 
      pricesForEachAirline.push(item); 
    }); 
    $.each(pricesForEachAirline , function(){ 
     $('#data').append(this.name+":").append('</br>'); 
     $.each(this.infos, function(){ 
      $('#data').append(this.price+"&nbsp; DEPARTURES:").append(this.departures.join(',')).append("&nbsp; ARRIVALS:").append(this.arrivals.join(',')).append("</br></br>"); 
     }); 
    }); 

});});​ 

希望,這將是有用的你)

+0

ofcourse它會幫助我))你是JSON神! ) 感謝您的幫助! –

+0

我很高興有幫助:) –

1

不知道,並沒有測試它自己,但會不會是你忘記了索引你FaresFull元素的X

我的意思是,不應該你的代碼隨時撥打this.FaresFull [X]而成爲本:

for(var x in this.FaresFull) 
{  
    if(this.FaresFull[x].FareId in list) 
    { 
     var flight = { from : [], to : []}; 
     // for testing only first Directions/Segments array element taken 
     for(var y in this.FaresFull[x].Directions[0].Segments[0].Trips) 
     {     
      flight.from.push(this.FaresFull[x].Directions[0].Segments[0].Trips[y].Departure.AirportCode); 
      flight.to.push(this.FaresFull[x].Directions[0].Segments[0].Trips[y].Arrival.AirportCode); 
     } 
     dataForEachFlight.push(flight); 
    } 
} 

編輯:更正後的代碼,也見http://jsfiddle.net/LZ8wN/2/

編輯2: 您可能想嘗試這種替代方法來遍歷數組。 請注意,我在您的飛行聲明和分配的末尾添加了分號。

$.each(data.Airlines, function() { 
    var flight = { from : [], to : []}; 
    $.each(this.FaresFull,function(w) { 
     if(this.FareId in list) 
     { 
      $.each(this.Directions,function(x) { 
       $.each(this.Segments,function(y) { 
        $.each(this.Trips,function(z) { 
         flight.from.push(this.Departure.AirportCode); 
         flight.to.push(this.Arrival.AirportCode); 
        }); 
        dataForEachFlight.push(flight); 
       }); 
      }); 
     } 
    }); 
}); 
+0

nope :(同樣的錯誤,但這次用x)) –

+0

看不到任何錯誤,然後..它超過了我的頭。你仍然得到一個錯誤** this.FaresFull.Directions是未定義**或寧可** this.FaresFull [x] .Directions是未定義**現在?錯誤應該現在指示索引號。 – AardVark71

+0

對不起,現在沒有任何錯誤,但功能似乎停止在這一行之後:'$ .getJSON('http://api.anywayanyday.com/api/Fares/?R='+id+'&V=Matrix&VB = true&L = ru&_Serialize = JSON&callback =?',function(data){' –