jQuery AJAX成功数据仅解析最后一个JSON节点的奇怪问题

Weird issue where jQuery AJAX success data only parses last JSON node

本文关键字:节点 JSON 问题 最后一个 成功 AJAX 数据 jQuery      更新时间:2023-09-26

所以我有以下jQuery代码:

function updateOrderSummary(orderID) {
    var returnString = orderID;
    $.ajax({
        url: "library/getOrderSummary.php",
        type: "POST",
        data: ({returnString:returnString}),
        success: function(data){
            console.log(data);
        }
    });
}

运行此脚本时,控制台显示以下 JSON:

{"orderDetails":{"orderItem":{"itemName":"351","itemQuantity":"2","itemID":"5-5331fbfd5e0e7","costPerPlay":"2"},"orderItem":{"itemName":"Demo","itemQuantity":"1","itemID":"5-54067191b71e8","costPerPlay":"1"},"orderItem":{"itemName":"314","itemQuantity":"1","itemID":"5-5331f5b41f9f4","costPerPlay":"1"}}}

格式化后,它看起来像这样(为了您的方便):

{
    "orderDetails": {
        "orderItem": {
            "itemName": "351",
            "itemQuantity": "2",
            "itemID": "5-5331fbfd5e0e7",
            "costPerPlay": "2"
        },
        "orderItem": {
            "itemName": "Demo",
            "itemQuantity": "1",
            "itemID": "5-54067191b71e8",
            "costPerPlay": "1"
        },
        "orderItem": {
            "itemName": "314",
            "itemQuantity": "1",
            "itemID": "5-5331f5b41f9f4",
            "costPerPlay": "1"
        }
    }
}

当我通过 JSONLint (jsonlint.com) 运行它时,JSON 会进行验证,但是当我将数据类型:"json"添加到我的脚本中时,我似乎无法解析数据。(即:)

function updateOrderSummary(orderID) {
    var returnString = orderID;
    $.ajax({
        url: "library/getOrderSummary.php",
        type: "POST",
        data: ({returnString:returnString}),
        dataType: "json",
        success: function(data) {
            console.log(data);
        }
    });
}

当我这样做时,我的控制台似乎只显示返回的 JSON 字符串的最后一个"节点"。而且我似乎无法像往常那样解析它。

最终,我希望能够做的是获取返回字符串中存在的"orderItems"的数量(在本例中为 3),并为每个字符串显示"itemName"。 所以像这样:

for (var a = 0; a < numNodes; a++) {
     returnString += data.orderDetails.orderItem[a].itemName;
}

唉,我所做的一切似乎都没有让我深入了解 JSON。

有什么想法吗?

将 JSON 结构更改为以下格式。 而不是具有相同键(orderItem)的对象,将其分组为数组。

{
        "orderDetails": {
            "orderItem": [{
                "itemName": "351",
                "itemQuantity": "2",
                "itemID": "5-5331fbfd5e0e7",
                "costPerPlay": "2"
            },
            {
                "itemName": "Demo",
                "itemQuantity": "1",
                "itemID": "5-54067191b71e8",
                "costPerPlay": "1"
            },
             {
                "itemName": "314",
                "itemQuantity": "1",
                "itemID": "5-5331f5b41f9f4",
                "costPerPlay": "1"
            }
          ]
        }
    }

问题是您的结构被设置为具有 3 个相同键的对象。

由于对象键不能相同,因此整个属性都会被覆盖...只留下最后一个

结构需要更改为对象数组

这样更合适

"orderDetails": [
         { "itemName": "351","itemQuantity": "2" ....},
         { "itemName": "567","itemQuantity": "34" ....}
]