当 AJAX 请求返回错误条件(是的,302 是错误)时,默认Backbone.sync
不会引发异常,它将错误处理留给$.ajax
. 默认sync
如下所示:
Backbone.sync = function(method, model, options) {
// A bunch of bureaucratic setup and what not...
// Make the request, allowing the user to override any Ajax options.
return Backbone.ajax(_.extend(params, options));
};
并且Backbone.ajax
只是$.ajax
;注意以上是Backbone当前的master分支,当前发布的版本$.ajax
直接使用。
你想要做的是用Backbone.sync
总是强制错误处理程序的东西替换,如下所示:
error: (xhr, text_status, error_thrown) ->
if(xhr.status == 302)
window.location.replace('http://localhost:8080/login')
else
# call the supplied error handler if any
这样的事情应该可以解决问题:
parentSynchMethod = Backbone.sync
Backbone.sync = (method, model, options) ->
old_error = options.error
options.error = (xhr, text_status, error_thrown) ->
if(xhr.status == 302)
window.location.replace('http://localhost:8080/login')
else
old_error?(xhr, text_status, error_thrown)
parentSyncMethod(method, model, options)
如果您正在使用 Backbone 的主分支(或Backbone.ajax
在发布版本中阅读此内容),那么您可以替换Backbone.ajax
为强制执行上述错误处理程序的内容,而不要Backbone.sync
理会。