2

このような応答サーバーの後にサーバー呼び出しを試みています

 $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

まだ

お願いします、正しいフォームは何ですか?

4

1 に答える 1

0

これを再現しようとしましたがJsFiddle、できませんでした。あるリクエストを別のリクエストのコールバックで呼び出すことは完全に有効であるようです。$httpリクエストごとにサービスを使用していますか? そうしないと、問題が発生します。

実際の例(私はそこにモックされたサービスに対処していることに注意してください。これが要因である可能性があります):

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

ただし、あるコールバックを別のコールバック内から呼び出すことは、悪い習慣と見なされます。前に (誰かが) 述べたように、 deferred を使用する方がはるかに優れています。

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");
    });
});

上記の例の作業フィドル

于 2013-04-22T10:36:52.717 に答える