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

所以我有以下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时,它会进行验证,但是当我在脚本中添加dataType:“ 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;
}

las,我似乎没有做任何事情让我深入到JSON。

有什么想法吗?

参考方案

将您的json结构更改为以下格式。代替具有相同key(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"
            }
          ]
        }
    }

jQuery ajax发布电子邮件字段 - javascript

我不确定为什么我无法发布电子邮件字段的内容,这是我的代码。<html> <head> <title></title> <script src="//code.jquery.com/jquery-1.11.2.min.js"></script> </head>…

无法在NetBeans中包含jQuery - javascript

当我在Netbeans中包含如下所示的jQuery文件时,我的代码不起作用:<script type="text/javascript" src="js/jquery-1.3.2.js">` 而当我按以下步骤进行时它起作用:<script type="text/javascript"…

jQuery Ajax上传文件php即使没有内容也接收数组 - javascript

它正在工作,但是在每次提交时,我什至都收到一个数组,甚至没有将文件添加到文件输入(多文件输入) postData = new FormData(this); $.ajax({ url: "/url", type: "POST", data: postData, cache: false, contentType: fa…

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

用户刷新页面或导航到其他页面时,侧边栏上的其他广告 - javascript

我有一个带有广告部分的侧边栏。当用户导航到其他页面或刷新页面时,我想在该部分上显示其他广告。我想轮播5-10个广告。每个广告都是一个脚本,因此包含10个以上的广告会减慢我的页面速度。在刷新时或用户导航到其他页面时轮播广告的最佳方法是什么?这是给我的wordpress博客的,但我不想使用插件。JS Fiddle<?php $ads = array(�…