gpt4 book ai didi

javascript - 在 AngularJS 中,如何对 `$http` 的所有响应应用检查函数?

转载 作者:行者123 更新时间:2023-11-30 10:08:12 25 4
gpt4 key购买 nike

$http({
method: 'POST',
url: '/getAllUsers'
}).success(function(data, status, headers, config) {
if (data.length === 0) {
$location.path('/admin/login');
}
// process data
if (data.ok == 1) {
// correct data
} else {
// error
}
})

我使用$http 来获取服务器数据,如果验证失败,服务器将返回一个空字符串。我想要做的是,如果 data 为空,那么应用程序应该重定向到登录页面。但是由于controller很多,而且每个controller都有多个$http调用,所以不想到处复制粘贴directing代码。

有什么方法可以在每个 $http 响应中“注入(inject)”这个函数,而无需在所有地方编写相同的代码?

我是否只能将它应用于某些特定 Controller 中的 $http 调用?

最佳答案

您可以使用 http intercetor .拦截器的响应方法在 $http 收到来自后端的响应后立即被调用。您可以修改响应或进行其他操作。该方法使用 http 响应对象调用,需要直接返回响应对象,或者作为包含响应或新响应对象的 promise 。

$provide.factory('myHttpInterceptor', function() {
return {
'response': function(response) {
if (/* response failed */ ) {
// $rootScope broadcast
// or $location login
// or whatever you want
}

return response;
}
};
});

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

编辑:我不确定这是否是 $http 配置的正确用法(我从来没有这样做过..)但你也可以有条件地将 transformResponse 函数添加到单个 $http 调用 like this :

function transformErrorResponse(data, headersGetter, status) {
if (/* failed */)
// handle failure
}

$http({ transformResponse : transformErrorResponse})
.get(/* */)
.then(/* */);

关于javascript - 在 AngularJS 中,如何对 `$http` 的所有响应应用检查函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com