Backbone.js:为Backbone.sync实现定义超时

12
我正在使用backbone框架开发项目,并与外部API进行通信。我希望能够实现记录的实时更新。由于我无法访问外部应用程序的主后端,他们也没有提供websocket服务器或长轮询终端点,所以我只能使用setInterval轮询,轮询周期为50秒。这种方法一直表现良好。但问题在于如果API请求因某种原因挂起时间超过50秒,我就会立即触发新的请求,这就意味着现在有两个挂起的请求,最终它们会累积起来。有办法为请求设置超时吗?我知道所有请求都会导致Backbone.sync方法,但是我查看了源代码并没有找到设置XmlHttpRequest超时的可行方法。是否有其他解决方案或变通方法?

我知道所有的请求都会导向Backbone.sync。更重要的是,所有事件都会导向$.ajax()!这解决了关于backbone fetch()sync()请求的许多问题。 - Matt Fletcher
1个回答

22

只需在 options 参数中传递一个 timeout:milliseconds 选项给 fetch。这些选项将直接传递给处理低级别 XHR 调用的 jQuery.ajax

 collection.fetch({timeout:50000});

或者您可以在应用程序启动时通过调用jQuery.ajaxSetup为应用程序中所有请求设置全局超时时间:

Alternatively you can set a global timeout for all the requests made by your application by calling jQuery.ajaxSetup in your application startup:
$.ajaxSetup({timeout:50000});

我明白了,所以有一些可以传递给同步方法的选项没有记录。顺便问一下,我能否传递像{complete:functioname}这样的东西?以防我想要实现长轮询。 - ChuckE
1
您可以传递任何选项,没有任何验证。Backbone 使用其中一些选项并添加更多选项,然后将其传递给已记录的 jQuery.ajax。如果需要,您可以设置 complete 处理程序。 - jevakallio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接