2011-09-02 175 views
3

我有此代碼後40秒超時Ajax調用:如何設置ajax超時?

if (xmlhttp) { 
    xmlhttp.open("GET", MY_SERVLET, true);    xmlhttp.onreadystatechange = showResults;    
    xmlhttp.send(null); 
    var httpTimeOut=setTimeout("ajaxTimeout();",40000); 
      } 

     function ajaxTimeout() { 
      xmlhttp.abort(); 
     document.getElementById('errorShow').innerHTML = "Request Timed out"; 
      } 

但是我不能在我的地方,以測試這個由於環境的限制。任何人都可以告訴,如果這是正確的或任何修改是必需的?

回答

10

應該解決這個問題:

if (xmlhttp) { 
    xmlhttp.open("GET", MY_SERVLET, true); 
    xmlhttp.onreadystatechange = showResults;    
    xmlhttp.send(null); 
    setTimeout(function() { xmlhttp.abort() },40000); 

因爲ajaxTimeout功能無法「看到」 xmlhttp變量,但我們可以用匿名函數來訪問本地變量。

另一種方法是使用jQuery.ajax,以便庫處理它。

您的代碼看起來像這樣:

$.ajax({ 
    url: MY_SERVLET, 
    async: true, 
    timeout: 40000, 
    success: function(args) { 
     // on success code 
    } 
}) 
+0

和整潔我會名稱setTimeout函數:VAR xmlto = setTimeout的(...),然後清除它得到答案時,定時器:clearTimeout(xmlto);因爲讓它運行或再次調用ajax可能會造成一些混亂。 – FlorianB