我在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;
}
首先,请检查你的判断逻辑,有些问题。
现在帮你解决问题:
拦截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,相当拒绝请求 } }; });
希望对你有帮助
用了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