backbone.js ajax 请求的全局错误处理程序
有没有办法为backbone.js 执行的ajax 请求绑定一个错误处理程序?
我的情况:我可以随时收到401(未经授权),所以我需要显示登录弹出窗口。
Is there way to bind one error handler for ajax requests that performs by backbone.js?
My situation: I can get 401 (Unauthorized) at any time, so I need to show login popup.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当发生错误时,Backbone 的同步会触发“错误”事件。因此,您可以采取的一种方法是扩展 Backbone 的模型和集合对象以添加这些附加错误检查。它看起来像这样:
您将为 Collection 对象执行类似的操作。我还没有测试过上面的内容,但认为它非常接近。显然,您会选择更好的类名。 init 方法只是让子类有机会进行自己的初始化。
Backbone's sync triggers an 'error' event when errors occur. So one approach you could take is to extend Backbone's Model and Collection objects to add these add-on error checks. It would look something like this:
and you would do something similar for the Collection object. I haven't tested the above, but think its pretty close. Obviously, you would choose better class names. The init method just enables subclasses to get a chance to do their own initialization.
为此直接使用 jQuery。
例如,您可以对 Rails 中的 CSRF 执行相同的操作(使用 ajaxSend)。
您可以在这里阅读更多信息: http://api.jquery.com/jQuery.ajax#advanced -选项
Use jQuery directly for this.
You can do the same thing for CSRF in rails for exemple (using ajaxSend).
You can read more here: http://api.jquery.com/jQuery.ajax#advanced-options
我发现的可能是 Backbone 中“最正确的方法”:
您可以放置任何错误处理逻辑,而无需扩展模型或集合。在处理程序中使用 Backbone.Events 并将消息传输到其他错误处理程序或类似的东西。
What I found is possibly the "most right way" in Backbone:
You can put any error handling logic without extending Models or Collections. Make use of Backbone.Events inside handler and transmit messages to other error handlers or something like that.
您可以通过 jQuery .ajaxSetup 方法来处理此问题。我们有一个相同的情况(骨干应用程序可能随时收到 401 错误),我们通过在应用程序的入口点使用 jQuery 的 ajaxSetup 来处理它:
这种方法提供全局错误处理,而无需扩展 Backbone 基类。
You can handle this via the jQuery .ajaxSetup method. We have an identical situation (backbone app which may get a 401 error at any time) and we handle it by using jQuery's ajaxSetup in the entry point of our app:
This approach gives global error handling without the need to extend the Backbone base classes.