2013-01-01 1 views
3

안녕 얘들 아, 나를 도와 줄 수 있었으면 좋겠다.아약스 요청시 PHP 서버 시간 초과를 감지하는 방법

PHP 코드를 실행하는 페이지에 대해 ajax 요청을했다고 가정합니다. 페이지는 일부 데이터를 출력하지만 (flush() 메소드 또는 기타 방법 사용) 30 초의 시간 초과 또는 기타 오류로 인해 PHP 요청이 종료됩니다.

이제 요청이 끝나면 클라이언트 측에서 해당 요청을 찾고 요청을 다시 시작하려고합니다.

즉 내가 JS에 타이머를 설정하는 것이었다 사용이

xmlhttp.onreadystatechange=function(){ 
    if(xmlhttp.readyState==3 && xmlhttp.status==200){ 
    document.getElementById("A").innerHTML=xmlhttp.responseText; 
    } 
    else if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
    document.getElementById("A").innerHTML=xmlhttp.responseText; 
    //plus some additional code to end the process 
    } 
    else if(xmlhttp.status== SOMETHING /*WHAT DO I ADD HERE TO KNOW THAT THE SERVER HAS TIMED OUT OR SOMETHING SO I CAN RESTART THE XMLHTTP CYCLE */){ 
    //code to resend xmlhttp request. 
    } 

} 
+0

질문에 당신은 서버 측에 수표를 요구하고 있지만 코드에는 자바 스크립트에이 공간이 있습니다. 아약스가 비동기 적이기 때문에 해고 당하고 사용자가 페이지를 떠날 수 있습니다. 스크립트는 다시 실행하거나 서버에 시간 초과가 발생했음을 알릴 기회가 없습니다. 응답이 다시 올 때까지 말 그대로 사용자가 페이지에 머물러있게해야합니다. js 대신 서버에서 추적하여이 문제에 접근해야 할 수도 있습니다. –

+0

내 잘못, 그 오타되었습니다. 수정 됨. 또한 수표가 고객 측에 있어야합니다. 사용자가 페이지를 떠난다면 dosnet은 실제로 어떤 일이 일어날 지 문제가됩니다. –

답변

0

한 전략 같은 것을 있다고 가정하고, 호출은 성공 그 다음 분명합니다.

var myTimer = setTimeout(stuffToDoOnFailure, 6000); // 6 secs 

ajaxCall(function callBack() { 
    clearTimeout(myTimer); 
}); 

편집 : AJAX 호출이 6 초 후 성공하면 실행되는 당신은 어떻게 든 경우를 처리 할 수 ​​있도록

은 물론, 당신은, stuffToDoOnFailurecallBack 모두 끝낼 수 있습니다. 그것은 귀하의 애플 리케이션에 따라 다릅니다.

관련 문제