backbone.js ajax请求的全局error handling程序

有没有办法绑定一个error handling程序的ajax请求由backbone.js执行?

我的情况:我可以随时得到401(未经授权),所以我需要显示loginpopup窗口。

使用jQuery直接为此。

$(document).ajaxError(function (e, xhr, options) { // do your stuff }); 

你可以在rails中为CSRF做同样的事情(使用ajaxSend)。

你可以阅读更多: http:

发生错误时,主干的同步会触发“错误”事件。 所以你可以采取的一种方法是扩展Backbone的模型和集合对象来添加这些附加的错误检查。 它看起来像这样:

 ErrorHandlingModel = Backbone.Model.extend({ initialize: function(attributes, options) { options || (options = {}); this.bind("error", this.defaultErrorHandler); this.init && this.init(attributes, options); }, defaultErrorHandler: function(model, error) { if (error.status == 401 || error.status == 403) { // trigger event or route to login here. } } }); OtherModel = ErrorHandlingModel.extend({ }); 

你会为Collection对象做类似的事情。 我没有testing过,但认为它非常接近。 显然,你会select更好的类名。 init方法只是让子类有机会做自己的初始化。

我发现的可能是Backbone中“最正确的方式”:

 var GeneralErrorView = Backbone.View.extend({ events: { 'ajaxError': 'handleAjaxError' }, handleAjaxError: function (event, request, settings, thrownError) { //...handling goes here } }); this.view = GeneralErrorView({el: document}); 

您可以放置​​任何error handling逻辑,而无需扩展模型或集合。 利用处理程序中的Backbone.Events并将消息传递给其他error handling程序或类似的东西。

你可以通过jQuery .ajaxSetup方法处理这个。 我们有一个相同的情况(骨干应用程序,可能会在任何时候得到一个401错误),我们通过在我们的应用程序的入口点使用jQuery的ajaxSetup处理它:

 var appView = new AppView(options); $.ajaxSetup({ cache: false, statusCode: { 401: function () { appView.signIn(); } } }); appView.render(); Backbone.history.start({ root: config.rootUrl, pushState: true }); 

这种方法提供了全局error handling,而不需要扩展Backbone基类。