2010-11-30 17 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

どのようなエラーが発生しますか? 'マーカー 'はどこから来たのでしょうか? –

+0

関連:[JavaScriptタイマーのしくみ] –

+0

Googleマップ用のmarkerManagerユーティリティでAPIエラーが発生する – Mike

答えて

2

あなたが得たエラーやマーカーを作成するコードを提供していないため、何が間違っているかを知るのは難しいです。推測すると、おそらく最も起こりそうなことは、マーカを作成してマップを初期化するために実行するコードが同期的に実行されるのではなく、非同期的に実行されるということです。これは間違いなくajax呼び出しが関与している場合には間違いなく、最後のjavascript行が呼び出された時点でmap/managerシステムが準備できていないことを意味しますが、ある期間後に関数が終了した後。

不必要な遅延を招き、中断するのが難しいsetTimeoutを回避するには、特定の条件で時間が必要な場合は、マーカーを作成するコードを見て、定義されたコールバック/イベントで、初期化プロシージャの完了を示します。

関連する問題