如何从$ http.get请求获取响应数据?

时间:2015-07-31 07:41:11

标签: php json angularjs scope anonymous-function

我有以下控制器。

spaModule.controller("galleryController", function($http, $scope) {
    var test;
    $http.get("resources/php/gallery.php").success(function(response){
        test = response;
    });
    console.log(test);
});

此控制器向PHP文件发送一个get请求,该文件返回一些JSON,其中包含我在某个目录中拥有的所有图像的文件名。我知道我应该为此使用服务,但我只会在一个控制器中使用这些信息,所以我宁愿将它保存在这个控制器中。

我需要将匿名函数内部的响应数据放入控制器的范围内,以便我可以使用JSON数据创建一个gallery指令。

我在这个问题中添加的代码是我尝试这样做的。我认为我的问题可能是.success函数有自己的范围,或者可能是$ http对象,所以我在一个“嵌套”范围内。那就是我需要将JSON从匿名函数的范围中移入.success / $ http的范围,然后从该范围进入控制器的范围。我不确定这是我的问题,还是它是如何实现这一目标的。

如何将我的响应JSON提供给控制器的范围?

4 个答案:

答案 0 :(得分:2)

只需将其分配给$scope即可。本地var变量从来就不是Angular"范围",在回调内部或外部。

$http.get("resources/php/gallery.php").success(function(response){
    $scope.test = response;
});

如果您的意思是要对数据进行后处理,则需要在success回调中执行此操作。由于操作是异步操作,示例中的console.log部分永远无法访问此数据。

$http.get("resources/php/gallery.php").success(function(response){
    // do whatever you need to do here
    var data = response.map(..);
    // then assign to $scope:
    $scope.data = data;
});

答案 1 :(得分:0)

如果合适,您可以将隐藏的数据存储在您的范围内:

spaModule.controller("galleryController", function($http, $scope) {
   $http.get("resources/php/gallery.php").success(function(response){
       $scope.data = response;
   });
});

但是,如果数据规模不大,也许应该这样做。否则你应该将它存储在其他地方并处理它,并且只在$ scope

上设置ui所需的值

答案 2 :(得分:0)

    listenerAddPersonToBasket: function(data){
    BasketService.addPerson(data.personId,function(){
        this.updateBasketTotal();
    }.bind());
},

在此处设置成功函数内的$ scope.test。 Angular会注意到范围已更新并为您完成工作。因此,您可以在代码中的其他位置使用$ scope.test。熟悉异步功能。

我希望这回答你的问题。

答案 3 :(得分:-1)

您忘记在控制器中注入依赖项

请更改控制器代码段,如下所示

spaModule.controller("galleryController", ['$scope','$http',function($scope,$http) {
var test;
 $http.get("resources/php/gallery.php").success(function(response){
    test = response;
});
console.log(test);

}]);