2013-04-07 45 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