0

やあみんな、この問題がたくさん投稿されていることは知っていますが、何も役に立たないので、この質問をしています.質問は、phpに同期リクエストを送信する問題に直面しています. ここにリクエストを送信している私のモデル関数があります。

State.pushData = function () {
    $http({
    method: 'POST',

    url: 'pushData.php?action=pushdata',
    data: {'status': 'push', 'email' : State.campemail},
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function(response){
        if(response.error){
          console.log(response.error);
          return;
        }
        State.getCartData();
        State.selectedItems = [],
    });
}

この pushData 関数は、定義された URL にポスト リクエストを送信します。応答をフェッチします。書かれたコードは、最初に送信されたリクエストの成功時に「State.getCartData()」関数を実行することを想定しています。しかし、これはこのようには機能していません。両方のリクエストが一度に実行されます。$http を .post とメソッドで試しましたが、結果は同じでした。このような

   State.pushData = function () {
    $http.post('pushData.php?action=pushdata',
    {'status': 'push', 'email' : State.campemail}
    ).then(function(response){
        if(response.error){
          console.log(response.error);
          return;
        }
        State.getCartData();
        State.selectedItems = [],
    });
}

getCartData() 関数が実行された後に pushQuote リクエストが完了すると、非同期でリクエストを送信したいと考えています。これについてあなたの経験を共有してください。前もって感謝します。

4

1 に答える 1

0

いくつかのブレインストーミングの後、私の質問に対する答えを得ました。モデルで $http を返し、返された応答で .then() を呼び出します。最初に正常に完了したらリクエストを送信したいので、うまくいきました。ここに私のモデル関数があります

State.pushData = function () {
  return $http.post('pushData.php?action=pushdata',
  {'status': 'push', 'email' : State.campemail}
  );
}

上記の関数では、投稿要求をサーバーに送信し、その応答をコントローラー関数に返すだけです。モデルから戻った直後に実行されます。これが私のコントローラー機能です。

scope.pushIt = function() {
  var responseObj = State.pushData();
  responseObj.then(
    function() { //successs call back
      /*Business logic*/
      State.getCartData();
      State.selectedItems = []
    },
    function() { //Error call back
      /*Business logic*/
    }
  );
}

このアプローチの美しさは、必要な数のメソッドを使用できることです。それらはすべてチェーンで 1 つずつ実行されます。

scope.pushIt = function() {
 var responseObj = State.pushData();
  responseObj.then(
  function() { //successs call back
   /*Business logic*/
   },
  function() { //Error call back
   /*Business logic*/
  }
 ).then(
   function() { //successs call back
   /*Business logic*/
   },
   function() { //Error call back
    /*Business logic*/
   }
 );
}
于 2016-07-25T12:05:21.110 に答える