【问题标题】:Where can I put global ajax error handling in Ember?在 Ember 中哪里可以放置全局 ajax 错误处理?
【发布时间】:2015-04-05 20:01:36
【问题描述】:

在我的应用程序适配器中,我根据 ajax 错误返回错误代码。我在应用程序路由的错误方法中处理这些。如果我通过链接访问路由,这将非常有用。但是,如果我刷新路由或只是键入 URL,则不会调用我的应用程序的错误处理程序。有没有一个地方可以让我保证每次都运行这个错误处理?我真的不想在每条路由中实现相同的“如果 401,则显示登录”代码。

路由/application.js:

export default Ember.Route.extend({
  actions: {
    error: function(reason) {
        if (reason === 401) {
          alert('401');
            this.send('showLogin');
        }
    },

适配器/application.js:

import DS from 'ember-data';

export default DS.ActiveModelAdapter.extend({
    'namespace': '',
  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);
    if (jqXHR && jqXHR.status === 401) {
        return 401;
    }
    return error;
  }
});

编辑:

上面的代码几乎对我有用。我遇到的主要问题是 this.send('showLogin') 在刷新或点击 URL 时没有被捕获。将其更改为 transitionTo 效果很好:

import Ember from 'ember';

export default Ember.Route.extend(ApplicationRouteMixin, {
  actions: {
    error: function(reason) {
      if (reason === 401) {
        this.transitionTo('login');
      }
    },
    ...

【问题讨论】:

  • 我也有这个问题,找不到全局解决方案。你有没有得到解决?我发布了一个类似的问题:stackoverflow.com/questions/29926638/…
  • 是的,我终于让它工作了。请参阅上面的编辑。

标签: ajax ember-data ember-cli


【解决方案1】:

您可以制作一个应用程序适配器,然后从中扩展每个适配器,并使用 isInvalid 函数。

//app/adapters/application.js
import DS from 'ember-data';
import Ember from 'ember';

export default DS.JSONAPIAdapter.extend({

    isInvalid(status, headers, payload){ 
        if (status===401) {}
    },

});

//app/adapters/anotherAdapter.js

import AppAdapter from 'yourapp/adapters/application';

export default AppAdapter.extend({

});

【讨论】:

    【解决方案2】:

    如果您使用的是RSVP 承诺,那么

    Ember.RSVP.on('error', function(error) {
        // ...
    });
    

    或者如果你使用的是普通的 jQuery xhr

    $(document).ajaxError(function(evt, jqXHR) {
        // ...
    });
    

    【讨论】:

    • 这绝对有效,但我希望在全球范围内处理它。我可以在适配器中捕获它们并返回错误,但应用程序路由并不总是像我预期的那样捕获它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多