【问题标题】:AngularJS ng-repeater not able to read json properly when API returns one object当 API 返回一个对象时,AngularJS ng-repeater 无法正确读取 json
【发布时间】:2026-01-23 11:40:01
【问题描述】:

我正在学习 angularjsweb.api v2 并调用一个简单的 API 来获取联系人列表,使用以下代码:

   $scope.GetAllContacts = function () {
    $http.get('http://localhost:50820/api/contacts').
    success(function (data, status, headers, config) {
        $scope.contacts = data;
        // OUT PUT WILL BE [{contact1},{contact2},....]
    }).
    error(function (data, status, headers, config) {
        alert("couldn't get contacts.");
    });
  }

每个联系人对象都有(ID、姓名、姓氏、电子邮件)。

这是我的 HTML 页面

    <content ng-controller="ContactController">
        <table border="1">
            <tr ng-repeat="contact in contacts">
                <td>{{contact.Id}}</td>
                <td>{{contact.Name}}</td>
                <td>{{contact.LastName}}</td>
                <td>{{contact.Email}}</td>
            </tr>
        </table>
    </content>

当 API 仅返回 1 条记录时会出现问题,例如 {contact1} Like this {"Id":1,"Name":"James","LastName":"Oliver","Email":"james.oliver@ gmail.com"}

此时 angularjs 会将其视为具有 4 条记录的 JSON 对象,例如 [{ID},{Name},{Lastname},{Email}]

因此 Ng-Repeater 无法找到 contact.id、contact.name、contact.lastname 或 contact.email。

我不确定,是因为 ASP.Net API 返回错误的格式,还是我需要使用其他方法??

我已经尝试过 JSON.parse 和 Angular.toJson 但没有奏效。

【问题讨论】:

    标签: json api parsing angularjs-ng-repeat response


    【解决方案1】:

    我认为您可以在成功功能中检查您从网络服务收到的响应数据。

    console.log(data);
    

    如果它以以下格式打印,那么ng-repeater 将能够找到单个对象。

    [{"Id":1,"Name":"James","LastName":"Oliver","Email":"james.oliver@gmail.com"}]
    

    但如果你收到如下数据。

    {"Id":1,"Name":"James","LastName":"Oliver","Email":"james.oliver@gmail.com"}
    

    然后ng-repeater 将无法找到它(可能你应该检查你的服务器端)。

    我在JSFiddle做了一个快速测试

    【讨论】:

      【解决方案2】:

      发现问题,我有两种不同的方法,

          GetAllContacts()  //returns a collection of contacts
          GetContact(int id) // return a single contact object
      

      在提琴手中,两个响应都可以,因为它们被检测为 JSON 对象,但是 Ng-Repeater 将单个对象作为具有 4 个对象的 JSON(因为 4 个属性),而不是将其视为一个对象。

      所以我所做的就是将单个联系人对象放入一个集合中,并将结果作为一个只有一条记录的集合返回。它解决了这个问题。

      【讨论】:

        最近更新 更多