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 发送一个 post 请求。并获取响应。编写的代码假设在最初发送的请求成功时执行“State.getCartData()”函数。但这不是以这种方式工作的。两个请求同时执行。我曾用 .post 和方法尝试过 $http,但结果相同。像这样

   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 = [],
    });
}

我想异步发送请求,一旦 pushQuote 请求完成,getCartData() 函数就会执行。请分享您的经验。提前致谢。

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*/
    }
  );
}

这种方法的美妙之处在于您可以根据需要使用 then 方法。他们都会一一链式执行。

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 回答