2013-01-01 78 views
3

嘿,大家都希望你能幫助我。如何檢測ajax請求上的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

在你的問題你要求檢查在服務器端,但在你的代碼中你有JavaScript的空間在這個。由於您的ajax是異步的,因此可能會被觸發,然後用戶可能會離開頁面。該腳本將無法再次執行或通知服務器經歷了超時。你必須強迫用戶留在你的頁面上,直到回覆。您可能必須通過在服務器上而不是js上跟蹤此問題來解決此問題。 –

+0

我的不好,那是一個錯字。糾正。另外,我希望支票在客戶端。如果用戶離開頁面,dosnet真的很重要。 –

回答

0

一種策略,然後將其清除,如果調用成功。

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

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

編輯:

當然,如果後6秒的AJAX調用成功,則可能是兩個stuffToDoOnFailurecallBack執行結束,所以你要以某種方式處理這種情況。不過,這取決於你的應用程序。