【问题标题】:AJAX Request every second每秒 AJAX 请求
【发布时间】:2017-07-14 04:29:39
【问题描述】:

更具体地说,我想等到当前请求得到处理。处理完后,再做一个,在前一个处理完后等待一秒钟。在客户端断开连接的情况下,我希望继续发出请求,因此整个过程不会停止。

我下面的代码只是一次发出一堆请求:

       makeLiveRequest(testState) {
            var that = this;

            $.ajax({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url: '/getData',
                type: 'GET',
                dataType: 'JSON',
                success: function(response) {
                    that.$set(that.state, 'testData', response);
                },
                complete: function (data) {
                    that.convertChartData();
                    setTimeout(that.makeLiveRequest, 5000);
                }
            });

            this.makeLiveChartRequest();
        },

网上看了一下,好像不推荐setInterval。有什么想法吗?

【问题讨论】:

  • 在客户端断开连接的情况下,没有更多的客户端应用程序发出请求。所以我认为这是不可能的。
  • 你的逻辑看起来不错,你确定that 有一个makeLiveRequest 方法吗?它不会作为 settimeout 的回调。

标签: javascript ajax


【解决方案1】:

无法解决启动后续请求的确切原因(可能很快解决) 但我可以在这里注意到的一点是: 我们传递给setTimeout 的回调在window 对象的上下文中运行,所以你的 that = this 会将window 存储到that 变量中,并且不会获取相关数据,因此您想要实现的目标可能会出现逻辑故障。

而不是像这样调用

setTimeout(that.makeLiveRequest.bind(that,<your arg value for testState>), 5000);

或将回调传递给setTimeout 并从其内部调用that.makeLiveRequest(arg)

【讨论】:

    【解决方案2】:

    我推荐你使用async库,主要是forever方法。

    看看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 2013-12-31
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      相关资源
      最近更新 更多