2013-08-09 3 views
1

저는 자바 스크립트와 jquery의 초보자이며 jquery에서 긴 폴링을위한 효율적인 방법을 찾고있었습니다. 나는이 코드 조각을 보았고 complete :이라는 애트리뷰트에 당황했습니다. 나는 'complete'의 사용을 알고 있지만,이 코드 부분은 재귀 함수 호출을 발생시킬 것인가?효율적인 방법으로 jquery에서 긴 폴링

(function poll(){ 
    $.ajax({ url: "server", success: function(data){ 
     //Update your dashboard gauge 
     salesGauge.setValue(data.value); 

    }, dataType: "json", complete: poll, timeout: 30000 }); 
})(); 

미리 감사드립니다. :)

+0

예 재귀 적입니다. 그러나, 나는 대안에 비해 오래 투표가 결코 효율적이지 않다고 주장 할 것이다. –

+0

@KevinB 당신은 그 때 무엇을 건의합니까? –

+0

상황에 따라 구현하기가 어렵지 않은 경우 웹 소켓을 사용하십시오. –

답변

0

당신은 현재 호출 스택이 해제되도록 짧은 시간 제한을 사용하여 재귀를 피할 수 있습니다 : 현재 실행 클리어 한 후이 (아마) 다음 이벤트로 poll를 실행합니다

(function poll(){ 
    $.ajax({ 
     url: "server", 
     success: function(data){ 
      //Update your dashboard gauge 
      salesGauge.setValue(data.value); 
     }, 
     dataType: "json", 
     complete: function() { 
      setTimeout(poll, 0); 
     }, 
     timeout: 30000 
    }); 
})(); 

. 다시 말해서 jQuery는 complete 콜백을 실행하고 결국 onreadystatechange 콜백에서 벗어날 때까지 JavaScript 런타임이 poll을 다시 실행합니다 (다른 이벤트가 들어 와서 처음에는 이벤트 대기열에 도착하지 않는 한).).

+0

두 사람 사이에는 아무런 관련성이 없습니다. $ .ajax() 호출이 poll() 자체를 호출하는 것과는 다릅니다. 서버가 실제로 "complete"핸들러가 호출되면서 실제로 응답 (또는 타임 아웃)되었을 때, success 함수 내에서 poll()을 호출하든, complete : poll을 지정하든, setTimeout() 기법을 사용하든 관계없이 기본적으로) 동일한 시퀀스. –

1

OP 질문에 대답하려면 :

"완료 : 폴"이 기능을 계속해서 다시 호출합니다. 이렇게하면 꽤 많은 대역폭과 서버 시간 초과가 발생할 수 있으며, 충분한 사람이 사용하면 서버가 느려질 수 있습니다.

+3

서버가 긴 폴링 용으로 설정된 경우가 아니라 그의 질문에 대한 것입니다. – Dave