首页 新闻 搜索 专区 学院

angular 怎么在拦截器中取消http请求

0
[待解决问题]

我在http请求的拦截器的request阶段判断用户是否登录,没登录跳登录页,但是http请求还是为继续执行,怎么取消这个请求

 

 

$scope.login = function() {
logindata.login($scope.user).then(function(data) {
if (data.data.json_res == 'json_ok') {
$rootScope.USER = data.data.json_val;
$state.go($rootScope.NOWSTATE || 'app.person')
} else {
msg.text(data.data.json_error)
}
})
}

 

 

 

app.factory('interceptor', function($q, $rootScope, $injector) {
var interceptor = {
'request': function(config) {
if (config.params && (config.params.userid || config.params.userId|| config.params.customerId)) {
if ($rootScope.USER) {
config.params.userid = $rootScope.USER.id;
config.params.userId = $rootScope.USER.id;
config.params.customerId = $rootScope.USER.id;
return config;
} else {
$rootScope.NOWSTATE = $injector.get('$state').current.name;
$injector.get('$state').go('app.login')
return false
}
}else{
return config;
}




 

 

天上囧在天上飞的主页 天上囧在天上飞 | 初学一级 | 园豆:6
提问于:2016-03-29 14:04
< >
分享
所有回答(1)
1

首先,请检查你的判断逻辑,有些问题。

现在帮你解决问题:

拦截http的request请求时,返回的是config对象或者是promise对象,不能是false。如果要不让请求继续执行,需要返回promise对象,并且必须是拒绝类型的,这里要用到$q服务,关于promise和$q的使用,请自行查阅相关api。

下面给出解决例子:

$httpProvider.interceptors.push(function($q) { // 注意在这里要注入$q服务
    return {
        'request': function(config) {
            return $q.reject("reason"); // 不让请求继续执行,调用$q服务的reject()方法,返回拒绝的promise,相当拒绝请求
        }
    };
});
   

希望对你有帮助

formcc | 园豆:304 (菜鸟二级) | 2016-03-29 16:22

用了promise后请求是被拦截了,但是还是有报错。

是不是reject后不能用.then这种形式了?

方便的话能不能加下我QQ524840833

ionic.bundle.js:25642 TypeError: Cannot read property 'headers' of undefined
at serverRequest (ionic.bundle.js:23340)
at processQueue (ionic.bundle.js:27879)
at ionic.bundle.js:27895
at Scope.$eval (ionic.bundle.js:29158)
at Scope.$digest (ionic.bundle.js:28969)
at Scope.$apply (ionic.bundle.js:29263)
at HTMLAnchorElement.<anonymous> (ionic.bundle.js:62385)
at HTMLAnchorElement.eventHandler (ionic.bundle.js:16583)
at triggerMouseEvent (ionic.bundle.js:2948)
at tapClick (ionic.bundle.js:2937)(anonymous function) @ ionic.bundle.js:25642(anonymous function) @ ionic.bundle.js:22421processQueue @ ionic.bundle.js:27887(anonymous function) @ ionic.bundle.js:27895Scope.$eval @ ionic.bundle.js:29158Scope.$digest @ ionic.bundle.js:28969Scope.$apply @ ionic.bundle.js:29263(anonymous function) @ ionic.bundle.js:62385eventHandler @ ionic.bundle.js:16583triggerMouseEvent @ ionic.bundle.js:2948tapClick @ ionic.bundle.js:2937tapTouchEnd @ ionic.bundle.js:3064

 

支持(0) 反对(0) 天上囧在天上飞 | 园豆:6 (初学一级) | 2016-03-29 17:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册