2009-11-03 2 views
0

사람이 실행중인 타이머 (자바 스크립트의 setTimeout)와하고 데이터 검색을 프로그래머 특징으로하는 샘플 코드 ..이 타이머가하는 내가 새 메시지를 표시하는 것입니다 무엇을 기본적으로JQuery와해서 getJSON에서는 setTimeout 내부 타이머

를 .. 게시 할 수

myFunction(param){ 

//data retrieval operation 
//using getJSON.. call displaydata() base on param 

settimeout("myFunction()", param, 1000); 

} 

function displaydata(param){ 

//processing 
alert('test')} 

getJSON을 사용해야합니까? 제 생각에는 비동기 호출 문제가 있습니다.

답변

2

두 가지 사항은 코드에서 수정해야한다는 것입니다.

  • setTimeout() 방법은
  • 비동기 getJSON 호출이 다음 시간 제한과 getJSON 방법의 결과 사이의 경쟁 조건을 만들고 일부 잘못된 인수가 있습니다. 대신 다음을 수행하십시오.

function yourFunction(params) { 
    jQuery.getJSON("url", {data}, function(data, textStatus){ 
     // handle your JSON results 

     // Call the timeout at the end of the AJAX response 
     // This prevents your race condition 
     setTimeout(function(){ 
      yourFunction(params); 
     }, 1000); 
    } 
} 

setTimeout(function(){ 
    yourFunction(params); 
}, 1000); 
0

첫 번째 매개 변수는 함수 리터럴이나 함수 참조 여야하며 두 번째 매개 변수는 밀리 초이어야합니다.

setTimeout(function() { 
    getData('param') 
}, 1000); 

function getData() { 
    $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", 
     function(data){ 
      $.each(data.items, function(i,item){ 
      $("<img/>").attr("src", item.media.m).appendTo("body"); 
      if (i == 3) return false; 
      }); 
     }); 
} 

예제에서 실제 인수를 사용하고 있지 않지만 쉽게 업데이트 할 수 있습니다. 또한 폴링 (poll/recursive call)을하지 않았는지 확실하지 않았습니다.

+0

콜백 데이터가 손실 될 가능성이 있습니까? 때때로 콜백 전에 settimeout 간격이 먼저 왔기 때문에. – h3n