【问题标题】:angularJS not parsing array of stringsangularJS不解析字符串数组
【发布时间】:2015-05-12 00:08:50
【问题描述】:

好吧,我一直在痛打这个:

我从服务器返回以下 JSON:

{
    "SendDate" : "2015-03-16T22:48:27.747",
    "SendTo" : {
        "ContactIds" : ["28a24538-cdfc-4453-920d-86f57d7eaf22"],
        "GroupIds" : []
    },
    "Message" : "MEETING TIME!!!!!"
}

我已经用几个 REST 客户端检查了这个 - 这就是返回的结果。

我有 AngularJS 通过 $http.get() 操作“获取”它,但我在“ContactIds”值上得到一个未定义的值 - 所以,我在 JS 控制台中看到的是:

SendDate : "2015-03-16T22:48:27.747"
SendTo: 
  ContactIds: Array[1]
    0: undefined
    length: 1

我不知道是什么原因造成的。

有什么想法吗?

更新: 我附加了一个拦截器并拦截了响应,当我将数据提供给控制台时结果是相同的 - 但是当我使用时:

JSON.stringify(数据)

我可以看到数组中的数据在那里!

更新 2:

好的,现在这让我发疯了。我玩过拦截器,如果我对响应进行字符串化然后使用 JSON.parse() - 它工作正常,但是当我通过响应时,它又搞砸了。

我通过 Angular 的解析过程一直追踪到“fromJson()”函数。 (下面的代码:)它作为字符串进入函数。 (现在是 Bizzarro 部分)

我修改了这样的代码:

function fromJson(json) {

    var obj1 = JSON.parse(json);
    console.log("Obj1:");
    console.log(obj1);

    //my altered angular code
    var obj2 = isString(json) ? JSON.parse(json) : json;  
    console.log("Obj2:");
    console.log(obj2);

    //  Pass to program...
    return obj1;
    //return obj2;

    /*  original angular code:
    return isString(json)
        ? JSON.parse(json)
        : json;
    */
}

如果我运行它并返回 obj1,控制台会将 obj1 的 ContactIds“0”索引记录为“未定义” - 但 obj2 记录为“28a24538-cdfc-4453-920d-86f57d7eaf22”。

“太棒了!”,我在想 - 所以我返回 obj2,但现在它记录未定义但 obj1 的“0”索引现在是正确的值。 (什么?)

所以我反转代码,只是为了看看,然后返回 obj1 - 我会被诅咒的 - obj2 返回“28a24538-cdfc-4453-920d-86f57d7eaf22”并且 obj1 是未定义的。 (就像在逗猴子一样。)

它必须是稍后在管道中执行它的东西 - 或者 - 它可能与作为 GUID 字符串的数组有关 - 但我在其他地方使用 GUID 字符串没有问题。

这也可能是另一个我不知道的“角度过程”导致了这种情况 - 角度令人印象深刻。

不管怎样,我都超级困惑。

这太愚蠢了——我很惊讶字符串数组如此困难——更糟糕的是,我似乎是唯一一个遇到这个问题的人。 (我昨天研究了六个小时......)

各位,还有什么想法吗?

【问题讨论】:

  • 你能说明如何处理$http.get()的结果吗?
  • 检查浏览器控制台网络选项卡中的实际请求以查看实际收到的内容。显示更多代码
  • 您是否在响应对象上使用了 angular.copy?当我想克隆的对象中有一个 uuid 字符串时,我遇到了这个函数的问题......不要问我为什么,我只是切换到 JSON.parse/JSON.stringify (反正更快)
  • 是的,$http.get() 非常简单——它只是 $http.get()。至于网络浏览器 - 我确实向您展示了代码。JSON 字符串是我得到的。至于显示更多代码——我是代码的极简主义者——我已经向你展示了我所拥有的。不,我没有使用 angular.copy() - 我使用的是 angularJS 1.4 开箱即用的所有内容。好主意-谢谢分享! :)

标签: arrays json angularjs string parsing


【解决方案1】:

天哪,我太笨了!!!

首先我要感谢所有试图帮助我的人。

答案是这样的 - 没有问题,也就是说,不是 Angular 或其解析器。

问题是控制台正在记录转换后的数据,在我的控制器上出现错误。我端的数据与我在控制器中的列表中的数据不匹配 - (数据库错误)。

底线:

如果您弹出此错误,请不要自上而下进行故障排除 - 从自下而上进行故障排除。

Angular 有许多制衡机制 - 如果您没有在整个程序中遇到“出血失败”,那么错误很可能在您的代码中。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多