避免在ajax回调函数中使用setTimeout

时间:2010-11-30 14:04:41

标签: javascript jquery ajax google-maps google-maps-markers

有没有其他方法可以阻止setTimeout的必要?

function initialize(){

   $.get('test.xml', function(xml){

      //do some stuff with xml like...
      var icons = xml.documentElement.getElementsByTagName("icon");
        for(var i = 0; i < icons.length; i++) {
           var iconImage = icons[i].getAttribute("image"),
        }

      //do more things to create markers like...
      markers.push(marker);

      //try to add markers to map
      //this will give an error
      addMarkers(markers);

      //setTimeout makes it work
      setTimeout("addMarkers(markers)", 300);

      //is there any way to avoid the timeout?
   });

}

1 个答案:

答案 0 :(得分:2)

很难说出错是什么,因为您没有提供您获得的错误或创建标记的代码。试图猜测,最可能发生的事情是,您运行以创建标记并可能初始化地图的代码不会同步运行,而是异步运行。如果涉及一些ajax调用肯定会出现这种情况,这意味着在调用最后一个javascript行时,地图/经理系统还没有准备就绪,但经过一段时间之后,确定在函数退出之后

为了避免setTimeout,其中会引入不必要的延迟并且很容易破坏,如果在某些条件下需要更多时间,你需要查看创建标记的代码并查看是否存在定义了一个回调/事件,标志着初始化过程的完成。