【问题标题】:Unable to Display JSON Data Received on HTML无法显示在 HTML 上收到的 JSON 数据
【发布时间】:2016-04-26 04:50:47
【问题描述】:

所以我设法让我的脚本通过 $http.get 检索一些 JSON 数据,并以对象形式获取我的 JSON 数据。但是,我无法使用数组中的值。

这是我的 AppCtrl 部分 (AngularJS)

app.controller('AppCtrl', function($scope,$http) {


$scope.data = [];
$scope.submit = function() {

var link = 'http://www.mywebsite.com/api.asp';
$http.get(link).then(function(response) {
    $scope.data = response.data;
    console.log($scope.data);
});
};
});

这是 HTML 位

<form ng-submit="submit()">
      <input class="button button-block button-positive" type="submit" name="submit" value="Submit To Server">
    </form>
    <div class="card">
        <li ng-repeat="userdata in data">
          Username : {{userdata.username}}
          Age : {{userdata.age}}
        </li>
    </div>

即使我检索了 json 数据,我也无法检索它。我猜这与我没有正确称呼它有关吗?提前致谢。

更新:console.log($scope.data) 返回

"0 925121 日志 [object Object]"

我尝试在 response.data 上运行 JSON.stringify,我现在得到一个不同的 console.Log 结果和一个新错误。

console.log 将 JSON 信息返回为

{"data":[{"ID":1,"age":"24","username":"hidir"},{"ID":2,"age":"51","username ":"易卜拉欣"}]}

错误如下,表明我在数组中有重复的值,看起来不像。 :

"Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: userdata in data, Duplicate key: string:a, Duplicate value: a
http://errors.angularjs.org/1.5.3/ngRepeat/dupes?p0=userdata%20in%20data&p1=string%3Aa&p2=a

"

【问题讨论】:

  • 你能提供console.log($scope.data);的输出吗,你在浏览器控制台中得到的。
  • 是的,像 Deepesh 一样,我怀疑 data 不是您期望的数组。
  • 在代码中 ,为什么要将用户名的值绑定到数组数据?
  • $scope.data = [];为什么这里需要这条线。

标签: javascript angularjs json ionic-framework


【解决方案1】:

你可以试试这个吗?

app.controller('AppCtrl', function($scope,$http) {
    $scope.name = null;
    $scope.submit = function() {
        var link = 'http://www.mywebsite.com/api.asp';
        $http.get(link).then(function(response) {
            $scope.data = response.data;
            if(!$scope.$$phase) {
                //$digest or $apply
                $scope.$apply();
            }
        });
    };
});

【讨论】:

  • 加上 $scope.$apply(); ,我收到另一个错误“$digest 已经在进行中”并且不再获取 json 数据。
  • 嘿,Abhi,新的不再报错,但没有改变任何东西。
  • 其实不确定,但我已经在 plunkr 中编写了您的完整代码并运行它,它正在工作。你能匹配完整的过程吗? plnkr.co/edit/HoPY4kHO3cYtRQ617dfM?p=preview
  • 非常感谢您提供 Plunkr 代码。我将链接变量切换为我的变量。 Plunkr 停止工作。现在我知道我的 JSON 格式有问题。将检查并更新,再次感谢您
  • 好的,你可以告诉我发生了什么。也许它会给我增加一些好的知识:)
【解决方案2】:

为什么不使用 $http 调用后的成功函数,如下所示

$http.get(link).success(function(response) {
    console.log(response);
});
}; 

【讨论】:

  • 这不是答案。她已经在获取 json 数据。请再次检查问题。
【解决方案3】:

尝试使用 JSON.stringify(response.data);

【讨论】:

  • 这是一个有趣的选项。我已经用我这样做的错误更新了我的问题。
【解决方案4】:

使用这个

$http({
  url : link,
  method : "GET",
  headers: {
      'Content-Type': 'applcation/json'
     }
}).then(function(response) {
    console.log(response);
    $scope.data = angular.fromJson(response.data);
    console.log($scope.data);
});

【讨论】:

  • 没有工作,因为 JSON 数据已经是一个对象。所以这给出了相同的控制台日志结果。
  • 嘿 Devidas,这给了我 2 个 json 数据,但我仍然面临同样的问题。第二个由状态、标题等组成。
【解决方案5】:

感谢@Abhinav 的代码,我发现问题出在我的 JSON 格式上。我希望有人可以在这里更好地解释它以供将来参考,因为我不够精通,无法详细解释。

*第一个无效的 JSON 格式

{"data":[{"ID":1,"age":"24","username":"hidir"},{"ID":2,"age":"51","username":"ibrahim"}]}

对于上面的代码,只有当我用{{userdata[0].username}} 调用它时它才会起作用。使用这种格式的ng-repeat 会失败。

数组形式(适用于 Ionic)

[{"ID":1,"age":"24","username":"hidir"},{"ID":2,"age":"51","username":"ibrahim"}]

ng-repeat 适用于第二种格式。

【讨论】:

  • 其实早些时候你从 api 获取一个对象。该反对意见包含一系列用户详细信息。因此,如果您需要使用这些项目,则该“数据”对象具有数组,因此我认为您可以使用 $scope.data = response.data.data[0] 或者第二个数组肯定可以。另一件事是,如果您使用 $http.get().success(function(response) { }) 那么您将直接获得 api 发送的数据,即 $scope.data = response。但是,如果您使用 $http.get().then(function(response) { }) 那么您将使用 data 属性获得相同的数据,即 $scope.data = response.data。
猜你喜欢
  • 2015-01-02
  • 2019-08-11
  • 1970-01-01
  • 2017-09-09
  • 2015-10-04
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多