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

Ajax JSON响应生成动态下拉框时值与文本显示undefined问题求助

问题分析与解决方案

你遇到的核心问题是JSON响应结构和代码预期不匹配,导致下拉框的value和text都显示undefined。咱们一步步拆解:

为什么会出现undefined?

你的后端返回的JSON是两个平行数组:

{"ID":["53","54"],"NAME":["Volkswagen Project ","Nevpro Project"]}

但你原代码里的$.each(data, function(index, element))是在遍历data的顶层属性(也就是先遍历ID数组,再遍历NAME数组)。此时element是整个数组,而不是包含ID和NAME属性的单个对象,所以element.ID、element.NAME自然找不到对应的属性,返回undefined。


解决方案1:适配当前的JSON结构

既然ID和NAME数组长度一致,我们可以通过索引来对应取值,直接修改前端代码即可:

$.ajax({
    url: "//<?echo $_SERVER["SERVER_NAME"];?>/services/project_data.php",
    dataType: "json",
    type: "POST",
    //data: {lan : lan},
    success: function(data){
        const selectBox = document.getElementById("project");
        // 遍历ID数组的索引,同时从两个数组取对应值
        for(let i = 0; i < data.ID.length; i++){
            const option = document.createElement("option");
            option.text = data.NAME[i];
            option.value = data.ID[i];
            selectBox.add(option);
        }
    }
});

或者用jQuery更简洁的写法:

$.ajax({
    url: "//<?echo $_SERVER["SERVER_NAME"];?>/services/project_data.php",
    dataType: "json",
    type: "POST",
    //data: {lan : lan},
    success: function(data){
        const $select = $("#project");
        $.each(data.ID, function(index, id){
            $select.append(`<option value="${id}">${data.NAME[index]}</option>`);
        });
    }
});

解决方案2:修改后端返回规范的对象数组(推荐)

从API设计的角度,返回对象数组会更直观,也符合常规开发习惯,后续维护更方便。建议后端把JSON改成这种格式:

[{"ID":"53","NAME":"Volkswagen Project "},{"ID":"54","NAME":"Nevpro Project"}]

这样你的原代码只需要保持逻辑不变就能正常工作:

$.ajax({
    url: "//<?echo $_SERVER["SERVER_NAME"];?>/services/project_data.php",
    dataType: "json",
    type: "POST",
    //data: {lan : lan},
    success: function(data){
        const selectBox = document.getElementById("project");
        $.each(data, function(index, element){
            const option = document.createElement("option");
            option.text = element.NAME;
            option.value = element.ID;
            selectBox.add(option);
        });
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:40