Angular在响应服务器之后发出请求

时间:2013-04-16 18:42:49

标签: jquery angularjs

我正在尝试在像这样的响应服务器之后进行服务器调用

 $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

请问,什么是正确的表格?

1 个答案:

答案 0 :(得分: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