如何设置ajax超时?

buz*_*110 3 javascript ajax timeout settimeout

我有这段代码在40秒后超时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";
            }
Run Code Online (Sandbox Code Playgroud)

但是由于我所处的环境限制,我无法测试这个.谁能告诉我这是否正确或需要进行任何修改?

Nem*_*den 10

应该修复:

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

因为ajaxTimeout函数不能"看到" xmlhttp变量,但我们可以使用匿名函数来访问局部变量.

另一种方法是使用,jQuery.ajax所以图书馆会照顾它.

你的代码看起来像这样:

$.ajax({
    url: MY_SERVLET,
    async: true,
    timeout: 40000,
    success: function(args) { 
        // on success code
    }
})
Run Code Online (Sandbox Code Playgroud)