Как отправить синхронные запросы с помощью $ http файла Angular.js

0

эй, ребята, я знаю, что этот вопрос опубликовал много, но мне ничего не помогает, поэтому я задаю этот вопрос. Вопрос: я столкнулся с проблемой отправки синхронного запроса на php. вот моя функция Model, которая отправляет запрос.

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

Я хочу отправить запрос асинхронно, после того как запрос pushQuote завершится после выполнения этой функции getCartData(). пожалуйста, поделитесь своим опытом. заранее спасибо.

  • 1
    Насколько я могу судить, ваша проблема не во фрагменте, который вы опубликовали. Там нет никакого способа State.getCartData(); может быть вызвано до того, как обещание будет выполнено. Вы должны узнать, где State.getCartData(); срабатывает. Простой способ сделать это, это фрагмент: console.info((new Error()).stack); Это будет регистрировать стек ошибок без фактического выброса, но он покажет вам последние 10 шагов, которые ваше приложение предприняло для выполнения getCartData . Надеюсь это поможет.
  • 1
    Вот функция контроллера, вызывающая эту модель. scope.pushIt = function () {console.log («отправка данных на сервер»); State.pushData (); } здесь есть только вызов pushData ().
Показать ещё 2 комментария

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

Красота такого подхода заключается в том, что вы можете использовать такой метод столько, сколько хотите. все они будут выполняться один за другим в цепочке.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню