【问题标题】:Backbone.js: define timeout for Backbone.sync implementationBackbone.js:为 Backbone.sync 实现定义超时
【发布时间】:2013-01-18 17:23:37
【问题描述】:

我在我的一个项目中使用骨干网,集成了与外部 API 的通信。我想使用实时更新记录。由于我无法访问此外部应用程序的主后端,并且它们既不提供 websocket 服务器也不提供长轮询端点,因此我基本上可以选择使用 setInterval 和 50 秒的周期进行定期轮询.它一直运作良好。我的问题是边缘情况。如果由于某种原因 API 请求挂起超过 50 秒,比方说,我将立即触发一个新请求。这意味着,现在有 2 个挂起的请求,最终会加起来。有没有办法为请求设置超时?我知道所有请求都会导致 Backbone.sync,但我正在检查源代码,我没有看到任何可行的方法来设置 XmlHttpRequest 的超时。有没有办法干净地做到这一点而不覆盖行为?还是有其他解决方案/解决方法?

【问题讨论】:

  • “我知道所有请求都会导致 Backbone.sync” - 我认为这里更重要的事实是所有事件都会导致 $.ajax()!解决了很多关于主干网fetch()sync() 请求的问题。

标签: ajax backbone.js real-time polling


【解决方案1】:

只需将options 参数中的timeout:milliseconds 选项传递给fetch。选项直接传递给jQuery.ajax,它处理低级 XHR 调用:

 collection.fetch({timeout:50000});

或者,您可以通过在应用启动时调用 jQuery.ajaxSetup 来为应用发出的所有请求设置全局超时:

$.ajaxSetup({timeout:50000});

【讨论】:

  • 我明白了,所以还有一些选项可以传递给未记录的同步方法。顺便说一句,我还可以传递诸如 {complete : functioname} 之类的东西吗?如果我想实现长轮询。
  • 你可以传递任何你想要的选项,没有验证。 Backbone 使用了其中的一些,向其中添加了一些,然后将其传递给 jQuery.ajax,它也被记录在案。您可以根据需要设置complete 处理程序。
猜你喜欢
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2013-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
相关资源
最近更新 更多