Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs 1.4拦截器不工作_Javascript_Angularjs_Angular Http Interceptors - Fatal编程技术网

Javascript Angularjs 1.4拦截器不工作

Javascript Angularjs 1.4拦截器不工作,javascript,angularjs,angular-http-interceptors,Javascript,Angularjs,Angular Http Interceptors,首先,我要说我是一个有棱角的傻瓜,所以我怀疑这是一个基于我缺乏理解的愚蠢错误 我正在尝试创建一个拦截器来处理请求和响应错误 如果我在文件的顶部放置一个警报,它被调用,因此文件正在加载。但是,在调用配置之前,没有任何其他警报,包括文件底部的警报。responseError和requestError从未被调用 我试着将其简化到再现问题的最小值,我试过几个不同的例子,说明如何在使用过时代码的情况下实现它,我试着在控制器中注释错误子句,以防它吞下异常。。。。。我一天的大部分时间都在谷歌上搜索,试图让它发

首先,我要说我是一个有棱角的傻瓜,所以我怀疑这是一个基于我缺乏理解的愚蠢错误

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

如果我在文件的顶部放置一个警报,它被调用,因此文件正在加载。但是,在调用配置之前,没有任何其他警报,包括文件底部的警报。responseError和requestError从未被调用

我试着将其简化到再现问题的最小值,我试过几个不同的例子,说明如何在使用过时代码的情况下实现它,我试着在控制器中注释错误子句,以防它吞下异常。。。。。我一天的大部分时间都在谷歌上搜索,试图让它发挥作用,但我被难倒了

$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和dependency2未定义,我在这里得到的一个简化示例中出现了剪切粘贴错误。所以我把它们拿走了

然后我用angular.module('defaultApp')替换了模块,所以模块在示例中是一个占位符,而不是某种方便的全局存储它。。。您需要明确定义模块(或变量模块) (是的,我真的是个新手)

因此,一旦所有这些更改都应用到sbedulins示例中,我就得到了这两种方法的工作代码,对于postetity,这里是我应用程序中的实际工作代码

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');

}]);


非常感谢你们的帮助,我在示例中学习了有关角度速记的重要内容。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');

}]);
或者,您可以按中的定义推送匿名函数


此处描述的工作plunker用例

尝试删除'requestError'和'responseError'中的单引号。您如何定义
模块
?另外,
dependency1
dependency2
应该在模块中定义(这些被注入到您的拦截器中)。被angular.module('defaultApp')之类的东西替换。是的,首先模块是用它的依赖项创建的,例如,
var module=angular.module('app',['module1','module2')。然后,模块可以由全局变量
module
引用,也可以由
angular.module('app')
引用,而不使用第二个参数(第二种方法更好,因为它不会污染带有
module
var的全局命名空间)。请注意,指定“module1”、“module2”、“dependency1”、“dependency2”仅用于示例。有关工作示例,请参阅我答案的结束链接。
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');

}]);
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);
            }
        };
    });

}]);