2015-12-09 2 views
0

Я новичок в AngularJS, и у меня есть эта проблема. Я получил определенную услугу citiesService метода addCity:

.service('citiesService', ['$resource', function($resource){ 
    this.addCity = function(city) { 
     var cityItem = $resource("server/?module=cities&action=add", {}, {save: {method: "POST", isArray:true}}); 

     return cityItem.save({ 
      city: city 
     }); 
    }; 
}]) 

Он отлично работает, новый город был успешно добавлен в БД через PHP скрипт, но я не знаю, как вернуть ответ сервера. Сервер возвращения ответа, как:

$output = []; 
$output[] = ["success" => "added to database"]; 
echo json_encode($output); 

, а затем я получил этот контроллер:

.controller('citiesAddCtrl', function($scope, $modalInstance, citiesService) {   
    // save addCity form (modal) 
    $scope.saveForm = function() { 
     if($scope.city.name) { 
      $scope.a = citiesService.addCity($scope.city); 
     } 
    } 
}) 

, но я действительно не знаю, как отобразить ответ сервера в формате JSON. Когда я пытаюсь что-то вроде console.log($scope.a), он показан пустой массив, но как вы можете видеть, ответ сервера в меню правой отладки:

Можете ли вы помочь мне решить эту проблему, пожалуйста? Я прочитал несколько тем Stackoverflow и пробовал некоторые изменения, которые описаны здесь, но для меня ничего не работает.

ответ

1

С save возвращает обещание, вы можете получить доступ ответ следующим образом (непроверенные):

.controller('citiesAddCtrl', function($scope, $modalInstance, citiesService) {   
    // save addCity form (modal) 
    $scope.saveForm = function() { 
     if($scope.city.name) { 
      citiesService.addCity($scope.city).$promise.then(function(response) { 
       $scope.a = response 
      }); 
     } 
    } 
}) 
+0

'Ошибка. CitiesService.addCity (...), то это не function' ... много людей в Stackowerflow описано подобное решение, но это не работает для меня – pes502

+0

Не могли бы вы попробовать «citiesService.addCity ($ scope.city). $ Prom.then [...]»? – schneck

+0

да, теперь я играю с ним, и, похоже, он работает, как мне нужно! Большое спасибо! – pes502

0

Почему вы не просто использовать $ HTTP, который имеет четкую структуру обещание?

$http({ 
    method: 'POST', 
    url: "server/?module=cities&action=add", 
    data: $scope.city 

}).then(function successCallback(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }, function errorCallback(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 

Смотрите документацию на $http

Смежные вопросы