【问题标题】:Recall Long Polling AJAX Request When it Fails/Network offline在失败/网络离线时调用长轮询 AJAX 请求
【发布时间】:2014-05-20 08:38:53
【问题描述】:

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


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

我没有使用 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());
    }
}

【问题讨论】:

  • 继续请求正常请求,直到您获得成功的 200OK 响应。一旦你得到它,然后开始你的长轮询。你可以为它使用一个标志。
  • 我不想在长轮询之前发出 ping 请求..

标签: javascript ajax


【解决方案1】:

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

【讨论】:

  • 在长轮询的情况下,在我的情况下,服务器在 40 秒之前没有响应。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
相关资源
最近更新 更多