如何在Backbone.js应用程序中为每个ajax调用设置全局超时?

时间:2014-01-10 11:19:49

标签: backbone.js asp.net-web-api timeout

我正在使用Backbone.js框架,我使用的是dot net Web API(仅由我创建)。我从骨干的fetch方法调用API控制器。如果这个api没有响应30秒我想显示一些错误消息。我应该在哪里设置这个时间以及如何设置?

2 个答案:

答案 0 :(得分:1)

默认情况下,Backbone使用jQuery.ajax发出请求,这意味着您可以使用jQuery.ajaxSetup设置默认值。在您的情况下,您可以设置timeout选项:

  

<强>超时
  设置请求的超时(以毫秒为单位)。

尝试

$.ajaxSetup({
    timeout: 30000
});

答案 1 :(得分:1)

您可以使用所有提取和保存调用手动设置超时,如下所示:

MyModelInstance.fetch({
    timeout: 6000
});

但是,如果您希望全局特定超时,则更容易做的事情是在第一次加载Backbone时包装Backbone.sync方法。试试这个:

//Set the default options for all our sync calls - in this case, we're only messing with the timeout
var syncDefaultOptions = {
    timeout: 8000
};

//Save a copy of the default Backbone.sync function
var sync = Backbone.sync;

//Wrap the default Backbone.sync function with one that automatically applies our default options, but still allows them to be overwritten manually
Backbone.sync = function(method, model, options) {
    options = _.defaults(options || {}, syncDefaultOptions);
    sync(method, model, options);
};

请注意,上面的代码取决于lodash(_.defaults()),但您可能很容易复制它而没有相关的依赖