2012-01-13 4 views
0

PHP와 jQuery에서 긴 폴링 (예 : this)을 기반으로하는 채팅을하고 있습니다. 한 번 전체 페이지가 브라우저에서 다운로드되면 함수는 백엔드에 대한 긴 폴링 요청을 일부 시간 초과 한도로 만듭니다. 데이터가 백엔드에서 왔을 때 다시 폴링 요청을 보내고 오류가 발생하면 다시 새로운 긴 폴 요청.jquery PHP 긴 폴링 요청 문제

문제점 : 파이어 버그로 추적을 분석 한 결과, 긴 폴링 요청이 3 ~ 4 회 실행되는 것으로 나타났습니다. 그러나 그렇게해서는 안됩니다. 페이지 당 하나의 긴 폴링 요청 만 실행해야합니다.

그러나 코드는 완벽하게 작동합니다. 그러나 긴 폴링 요청 중복이 문제입니다.

function listen_for_message(){ 
// this functions is makes the long-polling request 
$.ajax({ 
    url: "listen.php", 
    timeout:5000, 
    success: function(data) { 
      $('#display').html(data); 
      listen_for_message(); 
      } 
    error: function() { 
      setTimeOut("listen_for_message()",2000); // if error then call the function after 2 sec 
    } 
    }); 
    return; 
} 
+2

긴 폴링을 시작하는 코드를 게시 할 수 있습니까? – jabclab

+0

이 (가) 질문에 포함 된 코드를 편집했습니다. –

답변

1

시도 terminate requests manualy에 :

var connection; 
function longpoll() { 
    if(connection != undefined) { 
     connection.abort(); 
    } 

    connection = $.ajax({ 
     ... 
     complete: function() { 
      longpool(); 
     } 
    }); 
} 

또한, (실행으로 중단 연결을 보여주는) 파이어 폭스/불을 지르고 문제가 될 수있다 크롬에서 테스트합니다.

UPDATE : ". 파이어 폭스에서 3.0 만, 스크립트와 JSONP 요청이 타임 아웃에 의해 취소 할 수 없습니다, 그것은 시간 제한 기간 이후에 도착하면 스크립트도 실행됩니다"

http://api.jquery.com/jQuery.ajax/

+0

좋은 제안이 내게 크롬을 확인하자. –

+0

코드에서 수행 할 수있는 어떤 방법이든 코드가 검사를 실행하면 요청이 실행되면 함수가 호출됩니다. –

+0

_connection_ 변수를 플래그로 사용하여 아약스 요청이 실행 중인지 확인하고 새 요청을 만들 수 없는지 여부를 확인할 수 있습니다. 'complete ='함수에서는'connection = undefined;'를,'connection! = undefined'이면'longpoll' 함수의 처음에서'return'을 설정하면됩니다. –