在我们的项目中,我们使用骨干来访问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);
};
包装所有成功方法
这个解决方案有风险吗?
我们忽略了什么吗?
有更好的解决方案吗?
答案 0 :(得分:0)
我可以确认你的方法是有效的,因为我们出于同样的原因做同样的事情。