Угловой ответ HTTP http запутанный ответ

0

Я создал RESTapi в Codeigniter, который работает до сих пор. Но сегодня возвращенные данные - это нечто совершенно запутанное, когда я вызываю API через угловые. Я не первый раз использую угловые, но теперь я не могу понять, где я делаю ошибку. Я заключаю, что проблема в угловой, потому что, когда я отправляю запрос от "почтальона", результат - это то, что я ожидаю.

Мой угловой контроллер:

.controller('adminCtrl', function($http, $q, NgTableParams) {
  var vm = this;
  var deferred = $q.defer();
  vm.selected = {};

  sendHttpRequest = function(req) {
    $http(req).success(function successCallback(response, status) {
        deferred.resolve(response);        
      })
      .error(function errorCallback(error) {
        deferred.reject(error);
      });
    return deferred.promise; 
  };

  vm.editGame = function(game) {
   vm.selected = angular.copy(game);
  };

  vm.reset = function () {
    vm.selected = {};
  };

  vm.getTemplate = function(game) {
   if (game.gameId === vm.selected.gameId){
    return 'edit';
   }
   else return 'display';
  };

  vm.save = function(idx) {
    
    var updateData = {
      method: 'POST',
      url: "<?php echo base_url('api/updateResult'); ?>",
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'X-API-KEY': "<?php echo $userInfo['API_Key']; ?>"
      },
      data: {
        'gameId': vm.selected.gameId, 
        'homeSaves': vm.selected.homeSaves,
        'awaySaves': vm.selected.awaySaves
      }
    }; 
    console.log(updateData);
    sendHttpRequest(updateData).then(function(x) {  
      console.log(x);
      vm.games[idx] = angular.copy(vm.selected); 
      vm.reset();
    }, function(error) {
      swal({   
        title: "Error!",   
        text: error,
        type: "error",   
        confirmButtonText: "OK!",   
        closeOnConfirm: true 
      }, function() { 
        vm.reset();
        //window.location.href = "<?php echo base_url(); ?>";
       });
    });  
  };
  
 
  var getData = {
    method: 'GET',
    url: "<?php echo base_url('api/result'); ?>",
    headers: {
      'X-API-KEY': "<?php echo $userInfo['API_Key']; ?>"
    }
  };

  sendHttpRequest(getData).then(function(data) {  
    _.forEach(data, function(o) {
      o.homeSaves = parseInt(o.homeSaves);
      o.awaySaves = parseInt(o.awaySaves);
    });
    vm.games = data;
  }, function(error) {
    swal({   
      title: "Error!",   
      text: error,
      type: "error",   
      confirmButtonText: "OK!",   
      closeOnConfirm: true 
    }, function() { 
      window.location.href = "<?php echo base_url(); ?>";
     });
  });


});

Это встроенный редактор для некоторых спортивных результатов. Когда APP запускается, мы вызываем sendHttpRequest (getData), и это хорошо работает. Если я попытаюсь смоделировать ошибку путем изменения url в запросе, функция ошибки будет возвращена, а "swal" покажет ошибку.

Проблема заключается в функции vm.save. Если я назову его всеми правильными параметрами, данные будут сохранены в моей БД без ошибок. Но если я попытаюсь имитировать ошибки путем изменения ошибки url или force, возвращаемой контроллером RESTapi, результат будет запутан.
Вместо функции (ошибки) будет выполняться функция (x) и полностью напечатать неверный результат (результат vm.games) даже возврат REST 405 Метод не разрешен в примере, когда я изменяю URL-адрес на неправильный ИЛИ 400/500, когда я заставляю REST-контроллер для возврата ошибки.

  • 0
    Попробуйте положить var deferred = $q.defer(); внутри функции sendHttpRequest ? Или, может быть, вы всегда используете обещание, которое было решено первым запросом.
  • 0
    положить var deferred = $ q.defer (); Внутри sendHttpRequest решаем проблему :) спасибо человеку. как я могу поддержать тебя?
Показать ещё 1 комментарий
Теги:

1 ответ

0

Попробуйте поместить var deferred = $ q.defer(); внутри отправляемHttpRequest функция.

Или вы всегда используете обещание, которое было разрешено первым запросом.

Ещё вопросы

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