문제

AJAX 페이지 새로 고침을 설정했습니다. 간격 설정.때때로 서버가 너무 느려 이전 요청이 완료되기 전에 새 요청이 시작되는 경우가 있습니다.

어떻게 하면 이를 방지할 수 있나요?

도움이 되었습니까?

해결책

새로 고침 간격보다 짧은 시간 초과 값을 사용하십시오. 요청이 시간이 오래되면 오류 핸들러를 호출하므로 핸들러의 타임 아웃 오류 및 기타 유형의 오류를 구별해야합니다.

 $.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   timeout: 5000, /* ms or 5s */
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });

문서 jQuery.com에서. 동일한 소스에서 위의 예이지만 시간 초과 값이 추가되었습니다.

다른 팁

대신 setTimeout을 사용하고 AJAX 요청 결과를 받은 후에만 또 다른 setTimeout을 시작하십시오.이렇게 하면 마지막 새로 고침 이후 지정된 기간 이후에만 새로 고침이 발생합니다.

고정 된 하드 코딩 된 간격을 사용하는 대신 : 다음 새로 고침을 현재 "성공"(또는 "완료") 이벤트 콜백에서 현재를 처리하는 마지막 단계로 트리거합니다.

동적 지연을 계산할 수 있도록 현재 요청이 보낸 시간을 추적하는 변수를 추가 할 수 있습니다.

  1. 현재 시간 T1을 가져 가십시오
  2. 비동기 요청을 보내십시오
  3. 다른 일이 발생합니다 ...
  4. 비동기 요청 반환, 콜백이 실행됩니다
  5. 현재 시간에서 T1을 빼십시오
  6. 결과 인 경우 <원하는 요청 간격, 지연 값> 0을 설정하십시오.
  7. 결과가> = 원하는 요청 간격, 지연 값 = 0을 설정합니다.
  8. 지연 값으로 설정 타임 아웃을 호출하여 다음주기 시작

내가 말할 수있는 것은 코드에 깃발을 사용하는 것입니다. 좋아요 (실제로 간단한 예제를 추천하는 것이 아닙니다)

var isWorking = false;
function doRequest(){
  if(isWorking) return;
  isWorking = true;
  $.ajax({
    ...,
    success: workWithResponse
  });
}

function workWithResponse(){
  /* doAnythingelse */
  isWorking = false;
}

setInterval(doRequest,1000);

그와 비슷한 것은 원시적이지만 인종 조건을 피할 수 있습니다. 문안 인사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top