在带有 turbolink 的 Rails 中使用 jQuery 进行长轮询

Posted

技术标签:

【中文标题】在带有 turbolink 的 Rails 中使用 jQuery 进行长轮询【英文标题】:Long polling using jQuery in Rails with turbolink 【发布时间】:2013-03-02 07:37:14 【问题描述】:

我正在按照说明使用 jQuery AJAX 请求 here 创建长轮询。 以下是我的代码:

:javascript
  (function poll()
      $.ajax( url: $("comment").data("url"), success: function(data)
          alert(data.comment);
      , dataType: "json", complete: poll, timeout: 8000 );
  )();

但这段代码不是超时 8 秒,而是连续轮询。我做错了什么,或者这是否与我在 Rails 3.2 中使用的 turbolink gem 冲突?

谢谢。

【问题讨论】:

【参考方案1】:

为什么会再次轮询,因为您在完成回调中再次调用函数 poll

    (function poll()
          $.ajax( url: $("comment").data("url"), success: function(data)
              alert(data.comment);
          , dataType: "json", complete: poll, timeout: 8000 );
-----------------------------------------^ //here
      )();

也不要混淆timeoutsetTimeout,这里的timeout表示如果ajax调用在8秒内没有返回就会触发错误回调

LIVE DEMO

【讨论】:

以上是关于在带有 turbolink 的 Rails 中使用 jQuery 进行长轮询的主要内容,如果未能解决你的问题,请参考以下文章

带有 mmenu/sidr 和 Jquery 和 Turbolinks 问题的 Rails

带有 Rails 4.2.0 的 Fotorama jQuery Gallery(Turbolinks 问题)

在 Rails 4 中使用 Foundation 和 Turbolinks 时遇到问题

如何在 Rails 中搭配 Turbolinks 使用 Vue

rails ckeditor不使用turbolinks

Rails 控制器检查 Turbolinks 是不是请求