2013-04-16 3 views
2

Я пытаюсь сделать запрос на сервер после ответа сервера, как этотУгловая сделать resquest после ответа сервера

$http.post($scope.serviceSave, { 
      'person': $scope.person 
     }).success(function(data){ 
      $http.get($scope.serviceList); 
     }); 

, но когда я попробовал это я получил

Error: $digest already in progress 

и не сделал запрос.

Я Тринг с помощью JQuery, как этот

<a href="#" ng-click="setContent('/people/list')" >People</a> 

$scope.setContent = function(service){ 
      $http.get(service); 
} 

затем

$http.post($scope.serviceSave, { 
      'person': $scope.person 
     }).success(function(){ 
      $("a:contains(People)").click(); 
     }); 

я могу сделать запрос, заставляя щелчок, но я получаю

Error: $digest already in progress 

еще

, пожалуйста, что Правильная форма?

+0

вы пробовали с помощью угловой? механизм обещания? (http://www.egghead.io/video/o84ryzNp36Q) – Gavriguy

+0

dosen't work Я пробую http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service –

+0

http: // stackoverflow.com/questions/14838184/error-digest-already-in-progress – mb21

ответ

0

Я попытался воспроизвести это в JsFiddle и не мог этого сделать. Похоже, что вызов одного запроса в обратном вызове другого совершенно прав. Вы используете услугу $http для каждого запроса? Не делать этого просит неприятностей.

Working example (имейте в виду, я обращаюсь издевались там службы, что может быть фактором):

$http.post("/echo/json/").success(function() {    
     console.log("finished 1st"); 
     $http.get("/echo/json/").success(function() { 
      console.log("finished 2nd"); 
     }); 
}); 

Однако вызова одного обратного вызова из другой обратного вызова считается плохой практикой. Как уже упоминалось ранее (кем-то), используя отложила гораздо лучше:

var deferred = $q.defer(); 
var promise = deferred.promise; 

$http.post("/echo/json/").success(function() {    
    console.log("finished 1st"); 
    deferred.resolve();    
}); 

promise.then(function(){ 
    $http.get("/echo/json/").success(function() { 
     console.log("finished 2nd"); 
    }); 
}); 

Working fiddle, например выше:

Смежные вопросы