You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jquery/ajax如何遍历包含重复键的JSON响应消息?

问题根因

你遇到的问题是JSON对象键名重复导致的默认覆盖:JSON规范要求同一个对象内的键名必须唯一,你当前的响应结构里,images和features字段下重复使用element作为键名,JS解析JSON时会默认用后出现的同键名值覆盖前面的值,因此解析完成后只会保留最后一个element的内容。

修复方案

1. 优先调整后端返回的JSON结构(最优解)

把images、features下的重复element对象修改为数组格式,修正后的响应结构参考如下:

{
    "line": {
        "name": "Google item",
        "images": [
            {
                "order": "1",
                "link": "https://google.com/1.jpg",
                "name": "1.jpg"
            },
            {
                "order": "2",
                "link": "https://google.com/2.jpg",
                "name": "2.jpg"
            },
            {
                "order": "3",
                "link": "https://google.com/3.jpg",
                "name": "3.jpg"
            },
            {
                "order": "4",
                "link": "https://google.com/4.jpg",
                "name": "4.jpg"
            },
            {
                "order": "5",
                "link": "https://google.com/5.jpg",
                "name": "5.jpg"
            }
        ],
        "features": [
            {
                "name": "1",
                "order": "1"
            },
            {
                "name": "2",
                "order": "2"
            },
            {
                "name": "3",
                "order": "3"
            },
            {
                "name": "4",
                "order": "4"
            }
        ],
        "purchasing_price": "10",
        "selling_price": "20",
        "ftp_path": "google/item",
        "description": ""
    }
}

2. 调整前端解析代码

同时需要修正你原有代码中的ID重复问题:同一个页面内不允许出现多个相同ID的元素,你之前重复生成id="feature"的输入框会导致DOM操作异常,修正后的代码参考如下:

function parseContent(content){
    $("#name").val(content.line.name);
    $("#ftp_path").val(content.line.ftp_path);
    $("#html_description").val(content.line.description);

    // 用类选择器删除所有已存在的特性输入框
    $(".feature").remove();
    // 遍历特性数组
    $.each(content.line.features, function(index, item){
        $("#features").append(`<input type="text" class="form-control mt-3 feature" value="${item.name}" required>`);
    });

    // 如果需要遍历图片也可以用同样的逻辑
    $(".image-item").remove();
    $.each(content.line.images, function(index, item){
        $("#images").append(`<img class="image-item mt-2" src="${item.link}" alt="${item.name}">`);
    });
}

如果暂时无法调整后端返回结构,你可以先获取原始的响应字符串,手动替换后再解析,但该方案兼容性差,不推荐长期使用。

内容的提问来源于stack exchange,提问作者Raphael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:36:03