在AngularJS中,$http服务用于发送HTTP请求。如果在长时间的请求中,$http请求没有起作用,可能是因为请求超时或者请求被取消。以下是解决此问题的一些方法:
timeout
参数来增加超时时间。例如:$http.get('url', { timeout: 30000 }).then(function(response) {
// 请求成功
}, function(error) {
// 请求失败
});
上述代码中,超时时间被设置为30秒。
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(function($q) {
var canceler = $q.defer();
return {
request: function(config) {
config.timeout = canceler.promise;
return config;
},
responseError: function(rejection) {
// 请求被取消
if (rejection.status === 0 && rejection.config.timeout.$$state.status === 0) {
console.log('请求已被取消');
}
return $q.reject(rejection);
},
cancelRequest: function() {
canceler.resolve();
}
};
});
}]);
app.controller('MyController', function($scope, $http) {
$http.get('url').then(function(response) {
// 请求成功
}, function(error) {
// 请求失败
});
$scope.cancelRequest = function() {
// 取消请求
$http.cancelRequest();
};
});
上述代码中,我们通过拦截器将取消请求的方法注入到$http服务中,然后在控制器中调用cancelRequest
方法来取消请求。
通过上述方法之一,你应该能够解决AngularJS的$http请求在长时间请求时不起作用的问题。