Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AJAX请求失败/网络脱机时调用长轮询AJAX请求_Javascript_Ajax - Fatal编程技术网

Javascript 在AJAX请求失败/网络脱机时调用长轮询AJAX请求

Javascript 在AJAX请求失败/网络脱机时调用长轮询AJAX请求,javascript,ajax,Javascript,Ajax,我正在PHP/Node.js应用程序中实现一个成功的长轮询。我创建了一个例程,在计算机唤醒后(在睡眠模式后)启动长轮询AJAX请求,如下所示 问题是AJAX请求由于internet连接而失败,因为它需要一些时间来准备,这导致AJAX请求失败。我需要再次调用此请求,直到internet恢复,但我无法找到任何方法来知道以前的请求是否未能发送新请求并跟踪其状态 我没有使用Jquery,也不想使用它 如果直接AJAX调用在超时秒内没有到达服务器,我可以为它们创建一个超时,但是长轮询请求状态在服务器上挂

我正在PHP/Node.js应用程序中实现一个成功的长轮询。我创建了一个例程,在计算机唤醒后(在睡眠模式后)启动长轮询AJAX请求,如下所示


问题是AJAX请求由于internet连接而失败,因为它需要一些时间来准备,这导致AJAX请求失败。我需要再次调用此请求,直到internet恢复,但我无法找到任何方法来知道以前的请求是否未能发送新请求并跟踪其状态

我没有使用Jquery,也不想使用它

如果直接AJAX调用在超时秒内没有到达服务器,我可以为它们创建一个超时,但是长轮询请求状态在服务器上挂起了40秒,我需要在发送2秒后检测它是否失败

有什么解决方案可以处理xmlHTTP对象吗

我将非常感谢你的帮助。谢谢

var program ={
    init: function(){
        this.isSleep = function(lastTime){

            var lastTime = lastTime;

            clearTimeout(program.tt)
            program.tt = setTimeout(function(){

                var currentTime = new Date().getTime();
                if(currentTime > (lastTime + 2000*2) ){

                    // request fails if the internet connection was not ready  
                    ajax.call({ // long polling request......});
                }

                program.isSleep(new Date().getTime());


            }, 2000);
        };

        this.isSleep(new Date().getTime());
    }
}

将变量设置为true,然后调用计时器2秒钟。如果ajax返回将该变量设置为false,如果计时器被触发,则检查您的变量并执行您需要执行的任何操作。

在长轮询的情况下,在我的情况下,服务器在40秒之前不会响应。继续请求普通请求,直到获得成功的200OK响应。一旦你得到它,然后开始你的长期投票。您可以使用标志。我不想在长时间轮询之前发出ping请求。。