2010-11-30 4 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 타이머 작동 방법] (http://ejohn.org/blog/how-javascript-timers-work/) –

+0

Google지도의 markerManager 유틸리티에 대한 API 오류가 발생합니다. – Mike

답변

2

오류가 발생하지 않았거나 마커를 생성하는 코드를 제공하지 않기 때문에 잘못된 정보를 말하기 어렵습니다. 짐작할 수 있겠지만 아마 가장 중요한 일은 마커를 만들고지도를 초기화하기 위해 실행하는 코드가 동기식으로 실행되지 않고 비동기 적으로 실행된다는 것입니다. 이것은 일부 아약스 호출이 관련되어있는 경우에 분명히 드러날 것입니다. 이는 마지막 자바 스크립트 라인이 호출 될 때지도/관리자 시스템이 준비되지 않았 음을 의미하지만 일정 기간 후 그리고 함수가 종료 된 후에 .

다른 것들 중에서 불필요한 지연을 가져오고 아주 쉽게 끊을 수있는 setTimeout을 피하려면 특정 조건에서 더 많은 시간이 필요합니다. 마커를 만드는 코드를 살펴보고 정의 된 콜백/이벤트이며, 초기화 절차의 완료를 표시합니다.

관련 문제