Angularjs Как получить проанализированные данные формата Json, возвращаемые ответом $ http в сервисе

#php #mysql #angularjs #angularjs-directive #angularjs-scope

#php #mysql #angularjs #angularjs-директива #angularjs-scope

Вопрос:

Прежде всего, я хочу прояснить, что я не получаю доступ к данным с помощью веб-службы. Моя база данных (php) и пользовательский интерфейс angularjs находятся на одном сервере.

В службе AngularJS я отправляю http-запрос Get на interface.php (База данных) он возвращает формат json. Я не знаю, как на самом деле проанализировать данные и отправить их на контроллер?

Здесь четкий код 🙂

var app=angular.module(«app.chart.ctrls»,[‘ngSanitize’]);

Контроллер

  app.controller("registrationCtrl",["$scope","$location","logger","registerService",function($scope,$location,logger,registerService){

          $scope.data= registerService.getYears();
       **how to parse the data is it correct format or not ? in Controller** 
  } 

**Service**
app.factory('registerService', function ($http,$q,$log) {
 return {
        getYears:function () {


            var deferred = $q.defer();
           $http({
                 method : "GET",
             url : "interface.php", 

                 }).success(function(data){

                     **** How to Return the data from here to Controller ***

                 })

        },

    }
});
 

interface.php

Комментарии:

1. deferred.resolve(JSON.parse(data)) затем в конце функции getYears return deferred.promise

2. Попробуйте вернуть обещание $ http в функции getYears, angular разрешает обещания по умолчанию. Если это не сработает, попробуйте использовать q promises.

3. $data = [{«id»: 1,»year»:1222},{«id»:2,»year»:343},{«id»:3, «year»:2323},]; возвращает json_encode($data) Это мои данные, которые возвращаются из interface.php к сервису, затем как отправить из сервиса на контроллер, затем на контроллере, как получить доступ в соответствии с столбцом 🙂 @JonathandeM.

Ответ №1:

1. Сначала определите объект в вашем контроллере, который позже вы сможете использовать в качестве хранилища для вашего http-ответа следующим образом :

          app.controller("registrationCtrl",["$scope","$location","logger","registerService",function($scope,$location,logger,registerService){

      $scope.data = {};
      // fire your servise function like this : 
      registerService.getYears($scope);
 

}

2- В вашем сервисе :

         app.factory('registerService', function ($http) {
        return {
         getYears:function (scope) {// scopes comes from your controller
        $http({method : "GET",url : "interface.php"})
        .success(function(data){
                scope.data = data;!!!!!!
             })
             }
          }
       });
 

Это сделано до сих пор, и это будет работать ;

НО если вы хотите использовать какое-то обещание, вы можете сделать так :

в вашем контроллере :

      .
     .
     .
     $scope.data = {};
      // fire your servise function like this : 
       var promise = registerService.getYears();
           promise.then(function(msg){
            $scope.data = msg.data[0];

           });
     .
     .
     .
 

в вашем сервисе :

   app.factory('registerService', function ($http) {
        return {
         getYears:function () {
          var promise =  $http({method : "GET",url : "interface.php"});
          }
           return promise ;
       });
 

Ответ №2:

из https://docs.angularjs.org/tutorial/step_11

источник:

 [
 {
  "age": 13,
  "id": "motorola-defy-with-motoblur",
  "name": "Motorola DEFYu2122 with MOTOBLURu2122",
  "snippet": "Are you ready for everything life throws your way?"
  ...
 },
...
]
 

ваш сервис выглядит так:

 phonecatServices.factory('Phone', ['$resource',
  function($resource){
    return $resource('phones/:phoneId.json', {}, {
      query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
    });
  }]);
 

и ваш контроллер:

 phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone', function($scope, Phone) {
  $scope.phones = Phone.query();
  $scope.orderProp = 'age';
}]);
 

итак, вы вызываете службу из контроллера и получаете результаты обратно.