У меня есть поле ввода. Когда в этом поле есть клавиатура, я отправляю запрос с помощью AJAX и $ http службы углового. Моя проблема в том, что когда запускается другое событие keyup, мне нужно отменить все ожидающие запросы. Я видел много ответов, но я не нашел решения.Как отменить ожидающие запросы в AngularJS?
Я попробовал две вещи:
сервис, который я называю
App.factory('findArticlesService', function($http, $q) {
var self = this;
self.canceller = null;
return {
getArticles: function(route, formData) {
if (self.canceller) {
self.canceler.resolve("Other request is pending");
}
var deferred = $q.defer();
self.canceller = $q.defer();
$http.post(route, angular.toJson(formData), {timeout: self.canceller.promise}).success(function(data) {
deferred.resolve({data: data});
});
return deferred.promise;
}
};
});
App.controller('mainCtrl', ['$scope', '$http', '$q', 'findArticlesService', function($scope, $http, $q, findArticlesService) {
var res = findArticlesService.getArticles(route, $scope.formData);
console.log(res);
}]);
Это не очень хорошо работает.
И это:
var canceller = $q.defer();
canceller.resolve();
$http.post(route, angular.toJson($scope.formData), {timeout: canceller.promise}).then(function(data) {...});
Это отменить все запросы перед их отправкой.
Вы можете мне помочь?
то, что вам нужно, это дребезг или дросселирование, в зависимости от того, что вы хотите достичь .. Infact нг покадрово-опции дают вам возможность дребезга, так что вы можете использовать это, а – harishr
я не думаю, что ng-model имеют любые взаимодействия с h служба $ http и запросы Ajax, нет? –
Я просто хотел указать, что в случае, если триггер для вызовов Ajax - это какое-то поле ввода пользователя, то вы можете использовать ng-model-options – harishr