骨干全球成功处理

时间:2013-04-18 16:08:17

标签: javascript jquery rest backbone.js

在我们的项目中,我们使用骨干来访问REST服务 此服务提供HTTP标头,其中包含一种会话令牌以验证当前用户 此令牌会在每次请求时更改。

我们在登录模型中使用此令牌来确定当前路线是否需要登录。

第一个想法是使用jQuery.ajaxSuccess。

$(document).ajaxSuccess(function(event, xhr, settings) {
    updateToken(xhr);
});

近乎有效但全球成功是在骨干成功处理者之后触发的 因此,如果任何骨干成功处理程序向服务器发起新请求,则此时它具有旧令牌,并且该请求将被拒绝。

在每个成功处理程序中调用updateToken或使用setTimeout继续处理是非常省力且容易出错的。它可能会被遗忘。

现在我们创建了这个解决方案

var BBsync = Backbone.sync;
Backbone.sync = function(method, model, options) {
    var success = options.success;
    options.success = function(model, response, options) {
        updateToken(options);
        success(model, response, options);
    };
    return BBsync.call(this, method, model, options);
};

包装所有成功方法 这个解决方案有风险吗?
我们忽略了什么吗? 有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我可以确认你的方法是有效的,因为我们出于同样的原因做同样的事情。