Как настроить время ожидания Ajax? - PullRequest
3 голосов
/ 02 сентября 2011

У меня есть этот код для тайм-аута Ajax-вызова через 40 секунд:

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";
            }

Однако я не могу проверить это из-за ограничений окружающей среды у меня дома. Может кто-нибудь сказать, если это правильно или какие-либо изменения необходимы ??

1 Ответ

10 голосов
/ 02 сентября 2011

Следует исправить это:

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
    }
})
...