加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我在哪里可以将全局ajax错误处理放在Ember中?

发布时间:2020-12-15 22:55:24 所属栏目:百科 来源:网络整理
导读:在我的应用程序的适配器中,我将根据ajax错误返回错误代码.我正在应用程序路由的错误方法中处理这些.如果我通过link-to访问路由,这非常有用.但是,如果我刷新路径或只输入URL,则不会调用我的应用程序的错误处理程序.有没有一个地方我可以把这个错误处理保证每
在我的应用程序的适配器中,我将根据ajax错误返回错误代码.我正在应用程序路由的错误方法中处理这些.如果我通过link-to访问路由,这非常有用.但是,如果我刷新路径或只输入URL,则不会调用我的应用程序的错误处理程序.有没有一个地方我可以把这个错误处理保证每次运行?我真的不想在每一条路线中实现相同的“if 401,show login”代码.

路线/ 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;
  }
});

编辑:

上面的代码几乎对我有用.我点击的主要问题是在刷新或点击URL时没有捕到this.send(‘showLogin’).将此更改为转换可以很好地工作:

import Ember from 'ember';

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

解决方法

您可以创建一个应用程序适配器,然后从中扩展每个适配器,并使用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({

});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读