如何在我的情况下获取json数据?

时间:2014-04-28 18:15:33

标签: javascript angularjs

我正在尝试使用httml get来获取json

我有类似

的东西
.controller('testController', function($scope, $state, $http) {
  $http({
        url: "/json/test.json",
        method: "GET",
    }).success(function(data) {
        $scope.testData = data;
        console.log(data)
    });

  //outside of the $http scope but under the same controller, I have
  //It shows undefined. 
   console.log($scope.testData)
})

我知道我们必须保留登录代码的数据,所以我不想修改$ http中的数据。反正有没有完成这个?谢谢!

2 个答案:

答案 0 :(得分:1)

首先,不要把它放在控制器中。将其移至服务。这就是服务的目的。

其次,$ http服务是异步的。您的结果仅存在于成功回调中,并且您的console.log将在http请求完成之前被调用。您需要将其分配给范围变量以在回调之外使用它,并且在回调完成之前期望它为空。

http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app提供了AngularJS身份验证服务的示例,如果这正是您正在做的事情。

继续你的例子:

.controller('testController', function($scope, $state, $http) {
  $scope.testData = {};
  $http({
        url: "/json/test.json",
        method: "GET",
    }).success(function(data) {
        $scope.testData = data;
        $scope.logData();
    });
  $scope.logData = function() {
    console.log($scope.testData);
  }
});

答案 1 :(得分:1)

创建此plnkr code是为了给出答案,是的,您可以在http请求之外使用$ scope.testData。

看看!!

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

app.controller('testController', function($scope, $http) {
  $http({
        url: "test.json",
        method: "GET",
    }).success(function(data) {
        $scope.testData = data;
        alert(data);
        callA();
    });

  function callA(){
   alert($scope.testData);
  }
});