Jquery angularjs显示从服务内部的json文件获取数据

Jquery angularjs显示从服务内部的json文件获取数据,jquery,json,angularjs,asynchronous,Jquery,Json,Angularjs,Asynchronous,我有json文件 [ { "Name": "namesfoo3", "param1": "paramoffoo3", "param2": "param2offoo3" }, { "Name": "namesfoo3", "param1": "paramoffoo3", "param2": "param2offoo3" } ] 我想通过服务获取数据,并将其作为控制器传递

我有json文件

[
    {
        "Name": "namesfoo3",
        "param1": "paramoffoo3",
        "param2": "param2offoo3"
    },
    {
        "Name": "namesfoo3",
        "param1": "paramoffoo3",
        "param2": "param2offoo3"
    }
]
我想通过服务获取数据,并将其作为控制器传递。 js文件:

但在控制台登录控制器中,我返回:Object{content:null}。 数据加载正确,因为在服务中我得到了正确的对象和数据。那个么我如何将数据传递给控制器呢?
另外,当我从数组php返回数据,并将其作为json_encode传递时,该示例仍然有效?

您不能在回调内部进行返回,它是异步的,在服务器响应到来时,函数已经完成,您将失去流

你需要做的是利用承诺。因此,从服务中,您将承诺返回给控制器,当响应到来时,将在控制器中触发回调。像这样:

var myApp = angular.module('myApp', []);

myApp.controller('filtrController', function ($scope, testService) {

    Init();

    function Init() {
        $scope.data = {};
        testService.getData().then(data) {
            console.log(data)
        });
    }

});

myApp.service('testService', function ($http) {

    this.getData = function () {
        return $http.get('data.json');
    }
});

如果您想对服务中的数据做些什么,您还可以连锁承诺。有关它的更多信息,请参见。

您不能在回调内部执行返回操作,它是异步的,在服务器响应到来时,函数已经完成,您将失去流程

你需要做的是利用承诺。因此,从服务中,您将承诺返回给控制器,当响应到来时,将在控制器中触发回调。像这样:

var myApp = angular.module('myApp', []);

myApp.controller('filtrController', function ($scope, testService) {

    Init();

    function Init() {
        $scope.data = {};
        testService.getData().then(data) {
            console.log(data)
        });
    }

});

myApp.service('testService', function ($http) {

    this.getData = function () {
        return $http.get('data.json');
    }
});

如果您想对服务中的数据做些什么,您还可以连锁承诺。有关详细信息,请参阅。

您正在执行异步调用,因此应该等待回调

将代码更改为:

function Init()
{
    $scope.data={};
    testService.getData().then(function(result){
          console.log(result);
    })                  
}
现在,在服务中,您还必须等待返回对象。否则,您将在提取obj之前返回它:

myApp.service('testService',function($http)
{    
     this.getData = function()
     {
         var defer = $.Deferred();
         $http.get('data.json')
              .success(function(response) {
                  // alert();
                  console.log(response);
                  defer.resolve(response);

              })
              .error(function(error){
                  console.error("The async call has fail");
              });
              return defer.promise();      
     }
});

您正在进行异步调用,因此应该等待回调

将代码更改为:

function Init()
{
    $scope.data={};
    testService.getData().then(function(result){
          console.log(result);
    })                  
}
现在,在服务中,您还必须等待返回对象。否则,您将在提取obj之前返回它:

myApp.service('testService',function($http)
{    
     this.getData = function()
     {
         var defer = $.Deferred();
         $http.get('data.json')
              .success(function(response) {
                  // alert();
                  console.log(response);
                  defer.resolve(response);

              })
              .error(function(error){
                  console.error("The async call has fail");
              });
              return defer.promise();      
     }
});

这是最好的答案,因为$http已经返回了promise,对于这样的简单任务不需要$q。这是最好的答案,因为$http已经返回promise,对于这样的简单任务不需要$q