Javascript 用http get替换硬编码的json

Javascript 用http get替换硬编码的json,javascript,json,angularjs,Javascript,Json,Angularjs,正在学习一些角度的知识,我想知道如何将这个硬编码的JSON数组替换为使用httpget提取的JSON。这是我正在做的工作。在顶部,我这样做是为了填充我正在使用的下拉列表: angular.module('myapp', []) .controller('MainCtrl', function($scope, $http) { var records; $scope.selCountry = ''; $scope.searchText = ''; $http.g

正在学习一些角度的知识,我想知道如何将这个硬编码的JSON数组替换为使用
httpget
提取的JSON。这是我正在做的工作。在顶部,我这样做是为了填充我正在使用的下拉列表:

angular.module('myapp', [])
  .controller('MainCtrl', function($scope, $http) {
    var records;
    $scope.selCountry = '';
    $scope.searchText = '';
    $http.get('http://www.w3schools.com/angular/customers.php').success(function(dt) {
      //window.alert(angular.toJson(dt));

      var countries = [];
      records = dt.records;
      dt.records.forEach(function(o) {
        var c = o.Country;
        if (countries.indexOf(c) == -1)
          countries.push(c);
      });
      $scope.countries = countries;
      $scope.total = countries.length;
    });

我不知道这是否也是我填充数组的地方?或者它甚至是那样做的(就像我上面做的那样)。我是否必须为所有对象创建数组,或者只能访问传入的JSON。Thx.

是的,这是将api响应分配给范围变量的地方。你可以这样写:

 $http.get('http://www.w3schools.com/angular/customers.php').success(function(dt) {
  //window.alert(angular.toJson(dt));

  $scope.countries = [];
  $scope.records = dt.records;
  dt.records.forEach(function(o) {
    var c = o.Country;
    if ($scope.countries.indexOf(c) == -1)
      $scope.countries.push(c);
  });
  $scope.total = $scope.countries.length;
});

您也不需要$scope.total变量。您只需使用$scope.countries.length即可访问它,如果不需要,您无需创建数组,只需绑定到返回的JSON对象即可。例如
$scope.customers=dt.records
。一般来说,您希望在获得结果时分配结果,因此这是正确的分配位置。您可能有更多的抽象,如错误处理等,但这通常是正确的。如果您要将任何内容绑定到范围内的customers变量(通过脏检查/框架使用的任何其他方法),您将负责更新UI。Check out restangular:既然我已经说了
records=dt.records
,在html中,我可以说
  • ?因为当我尝试它时,它不起作用这就是我写它的方式?我去掉了你的local countries变量,因为你不需要它。您只想使用$scope.countries变量。我刚刚读了你的其他评论。请参阅我的最新答案。您需要通过将记录放在作用域中来公开记录。啊,好的,谢谢,那么我如何访问html中的数据呢?从
    $scope.records
    ?。就像在行
  • 我当前正在访问数据数组中的每个项,我将如何在您的实例中执行此操作?只需使用记录即可。你把$scope部分去掉了。data ng repeat=“记录中的项目|订购人:'Name':反向|过滤器:selCountry |过滤器:searchText”