2010-11-30 31 views
1

是否有任何其他方式可以防止setTimeout被需要?避免在ajax回調函數中設置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? 
    }); 

} 
+2

它給了什麼錯誤? `marker`從哪裏來? – 2010-11-30 14:06:56

回答

2

由於您沒有提供您獲得的錯誤或創建標記的代碼,因此很難判斷出了什麼問題。試圖猜測,最可能發生的事情是您運行創建標記和初始化映射的代碼不會同步運行,而是異步運行。如果涉及到一些Ajax調用,這肯定會是這種情況,並且這意味着在調用最後一個javascript行時map/manager系統還沒有準備好,但是經過一段時間後肯定會在函數退出後。

爲了避免setTimeout,其中會引入一個不必要的延遲,很容易中斷,在某些情況下需要更多的時間,您需要查看創建標記的代碼並查看是否存在是一個定義的回調/事件,它標誌着初始化過程的完成。