2012-01-07 4 views
2

이해하기 쉽도록 답변을 검색하고 있지만 계속 찾을 수 없습니다.콜백 함수 사용 ... Jquery .Get

jquery .get ajax 함수를 사용하여 뭔가를 실행하면 php doc에서 대기하기 때문에 실행하는 데 약 10 초가 걸립니다. 10 초가 지난 후에 다시 실행하고 싶습니다. 기본적으로 아약스 기능이 끝났을 때입니다. ... 임 콜백을 사용하여 생각,하지만 난 그것을 어떻게 구조화하는 아무 생각이 없거나 내가 while 루프 나 .. 메신저 손실을 사용해야합니다

을 heres 내가이 내 코드 지금까지

function listen(callbackFn) { 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username '];} ?>', function(data) { 
     $('#chats').append(data); 
     callbackFn; 
    }); 
}; 
+0

을 당신은 원래 후 다시) (갔지 동일한 통화를 할 요구? 이것은 웹 페이지의 수명 내내 10 초마다 반복되는 것입니까? –

답변

1

이 당신을 위해 작동합니다 :

(function repeat_request(){ 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
     function(data) { 
      $('#chats').append(data); 
      repeat_request(); 
     } 
    ); 
})(); 

repeat_request을 호출되는 함수는 가능한 한 빨리 실행 이전 요청이 성공합니다. 요청이 실패하면 (예 : 사용자의 인터넷이 잠시 끊기는 경우) 요청이 반복되지 않습니다. 당신이 그것을 계속 반복 할 경우이 같은 대신 성공 .complete()를 사용해야합니다

(function repeat_request(){ 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
     function(data) { 
      $('#chats').append(data); 
     } 
    ).complete(repeat_request); 
})(); 
+0

나는 그것을 얻을 수없는 것, 메신저를 사용하여 메신저 그냥 한 번 실행하는 것, 그리고 그것을하지 않습니다. 더 이상 재귀 함수를 호출하십시오. – Robert

+0

아 잠깐, 나는 그것이 효과가 있다고 생각한다! – Robert

0

영원히

function poll() { 
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', function(data) { 

      $('#chats').append(data); 
      poll(); 
    }); 
} 

poll(); 

이 의지 꽤 많은 여론 조사 때마다 Ajax 호출 반환 : 나는 당신의 가장 좋은 방법은 함수에 그 포장 재귀 적으로 호출하는 것입니다 생각합니다.

1

함수의 코드를 넣어 10 초 타임 아웃 재귀 호출 :

function do() { 
    $.get('...', function (data) { 
     // data processing... 

     setTimeout(do, 10000); 
    }); 
} 

do(); 
+0

이것이 원하는 경우라면 클라이언트 브라우저에서 setInterval을 사용하는 것이 PHP를 10 초 기다리는 것보다 낫습니다. –

+0

글쎄 ... 나는 PHP를 10 초 기다려야한다. 긴 폴링을하고있다. 그러나이 경우 성공 함수 블록에 함수를 넣을 수 있습니까? – Robert

+0

@scott PHP 처리에는 잠시 (대기 시간 또는 기타 요인으로 인해 대기가있을 수 있음) 걸릴 것으로 보이며 다음 호출은 이전 호출이 완료된 후 10 초 후에 시작되어야합니다. 이것이 바로 이것이하는 일입니다. 그리고 그것은 IMO를 이해합니다. 간격을두면 중간에 일시 중지없이 서버에 대한 지속적인 요청이 신속하게 발생할 수 있습니다. – deceze

0

당신은 시도 할 수 있습니다 :

function listen() 
{ 
$.get('thread.php?tag=<?php echo $tag ?>&username=<?php 
if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
    function(data) { 
     $('#chats').append(data); 
     setTimeout(listen,100); // prevent recursive call 
    } 
); 
};