2013-04-07 86 views
0

我正在讀取一個帶有大約1180個軌跡點的gpx xml文檔,每個軌跡點都包含一個高程標記。我可以得到這個長度,但不能將它傳遞給稍後用於計算總上升的if循環。jquery:讀取xml文檔,變量沒有被傳遞出函數

var elevs = []; 
var $l = 0; 
     $.ajax({ 
      type: "GET", 
      url: "../gpx/27-Mar-13slow.gpx", 
      dataType: "xml", 
       success: function(xml) { 
        $(xml).find('trkseg').each(function(){ 
         $l=$(this).find("trkpt").length; 
         $(xml).find('trkpt').each(function(){ 
          elevs.push(+$(this).find('ele').text()); 
         }); 
         $('#holder').append('<div>' + $l + '</div>'); 
         //fn(); 
        }); 
       } 
     }); 

$('#holder').append('<div>' + $l + '</div>');正確顯示航跡點的總數,但移動它它沒有功能的外部。我假設爲全局變量$l不會更改爲軌跡點長度。任何人都可以啓發我爲什麼? (該高程o數組包含高程數據確定)

+0

你的AJAX功能是異步的,所以試圖用變量的成功回調外時,Ajax的功能有'nt完成,你的變量仍然包含零。在使用數據之前,您必須等待ajax調用完成,這就是成功回調的原因。 – adeneo 2013-04-07 19:23:52

回答

0

嘗試修改成功函數是這樣的:

success: function (xml) { 
    var xmlDoc = $.parseXML(xml); 
    var $xml = $(xmlDoc), 
    var $trkseg = $xml.find("trkseg"); 
    $trkseg.each(function() { 
     $l = $(this).find("trkpt").length; 
     $(xml).find('trkpt').each(function() { 
      elevs.push(+$(this).find('ele').text()); 
     }); 
     $('#holder').append('<div>' + $l + '</div>'); 
     //fn(); 
    }); 
} 
+0

一個美麗的東西,但沒有更多的成功填充變量!我將不得不學習什麼異步手段。但是,有可能延遲東西,直到ajax函數完成並且變量被填充了嗎? – 2013-04-08 08:34:30

+0

5分鐘後唔可編輯該評論! Scrub'是否可以延遲事件'並替代'在我可以使用數據之前,如何等待Ajax調用完成? – 2013-04-08 09:26:43