javascript - Angularjs 1.4 拦截器不工作

标签 javascript angularjs angular-http-interceptors

首先我要说的是,我是 Angular 方面的菜鸟,所以我怀疑由于我缺乏理解而犯了一个非常愚蠢的错误。

我正在尝试创建一个拦截器来处理请求和响应错误。

如果我在文件顶部放置一个警报,它就会被调用,因此文件就会被加载。但没有其他警报(包括文件底部和配置之前的警报)被调用。 responseError 和 requestError 永远不会被调用...

我尝试将其简化到重现问题的最低限度,我尝试了几个不同的示例来了解如何实现它,以防我使用过时的代码,我尝试注释掉 Controller 中的错误子句,以防万一它正在吞噬异常......我一天中的大部分时间都在谷歌上搜索,试图让它发挥作用,但我被难住了。

$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
    return {
        'responseError': function (rejection) {
            alert("Something went wrong");
            return $q.reject(rejection);
        },
        'requestError': function (rejection) {
        alert("Something went wrong");
        return $q.reject(rejection);
    }
    };
});
alert('myHttpInterceptor done');
module.config(['$httpProvider', function ($httpProvider) {
    alert('myHttpInterceptor push');
    $httpProvider.interceptors.push('myHttpInterceptor');
}]);

非常感谢任何帮助,特别是对于深入了解正在发生的事情的帮助

----为后人解答相关信息----

根据 sbedulins 和 Angad 答案的组合,我能够得到它 工作。

首先,一旦我让它工作起来,无论有没有单引号,responeError 和 RequestError 都可以工作...

dependency1 和 2 未定义,并且是我在 SO 上得到的简化示例中的剪切和粘贴错误。所以我删除了它们。

然后我用 angular.module('defaultApp') 替换了 module,因此 module 是示例中的占位符,而不是某种方便的全局存储它...您需要显式定义您的模块(或变量模块) (是的,我确实对 Angular 很陌生)

因此,一旦将所有这些更改应用于 sbedulins 示例,我就在这里获得了两种方法的工作代码,为了以后,这里是我的应用程序中的实际工作代码

angular.module('defaultApp').config(['$provide', '$httpProvider', function ($provide, $httpProvider) {

    $provide.factory('myHttpInterceptor', function ($q) {
        return {
            responseError: function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            },
            requestError: function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            }
        };
    });

    $httpProvider.interceptors.push('myHttpInterceptor');

}]);

或者

angular.module('defaultApp').config(['$httpProvider', function ($httpProvider) {

    $httpProvider.interceptors.push(function ( $q ) {
        return {
            'responseError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            },
            'requestError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            }
        };
    });

}]);

非常感谢您的所有帮助,我在示例中学到了有关 Angular 速记的重要知识。 sbedulin 得到了答案,尽管我需要评论的帮助才能得到他/她的工作答案

最佳答案

通过$provide的拦截器应该在config阶段定义,就在将其推送到$httpProvider.interceptors

之前
module.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {

    $provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
        return {
            'responseError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            },
            'requestError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            }
        };
    });

    $httpProvider.interceptors.push('myHttpInterceptor');

}]);

或者,您可以推送 docs 中定义的匿名函数。

module.config(['$httpProvider', function ($httpProvider) {

    $httpProvider.interceptors.push(function ($q, dependency1, dependency2){
        return {
            'responseError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            },
            'requestError': function (rejection) {
                alert("Something went wrong");
                return $q.reject(rejection);
            }
        };
    });

}]);

这里描述了工作插件的用例 disabling button while ajax request

关于javascript - Angularjs 1.4 拦截器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814989/

相关文章:

javascript - 如何分离日期输入 Bootstrap 日期范围选择器

angular - 如何以 Angular 5 显示每个 HTTP 请求的微调器?

angular - HttpInterceptor 中的注入(inject)服务未初始化

angularjs - 附加到正文时,UI Bootstrap 日期选择器重复

angular - 在 Angular 4 中缓存来自 HttpClient 的数据

javascript - 部分内容仅在页面刷新后显示

javascript - 异步函数里面有for of循环和await,它会等待吗?

javascript - 如何检查列表是否可排序?

javascript - 如何在AngularJS中分离路由

angularjs - 如何为angular ng-table中的不同列添加不同的过滤器比较器?