2011-09-02 179 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