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

为何jQuery Ajax填充<select>框时始终返回undefined?

问题分析与解决方向

首先,你遇到的undefined问题核心大概率是对返回数据的结构理解有误,遍历方式不对。咱们一步步来排查:

1. 先明确后端返回的rows结构

先重点看你控制台里console.log(rows)的输出:

  • 如果输出是对象数组(比如 [{"subcat":"分类1"}, {"subcat":"分类2"}]):那你用Object.keys(rows)遍历的是数组的索引(0、1、2...),索引是数字类型,自然没有subcat属性,所以会返回undefined。
  • 如果输出是键值对对象(比如 {"1":"分类1", "2":"分类2"}):那Object.keys(rows)拿到的是键名("1"、"2"),你需要用rows[rowss]来获取对应的值,而不是rowss.subcat。

2. 针对不同结构的修正代码

情况一:返回的是对象数组(最常见的场景)

直接遍历数组本身,不需要Object.keys,另外建议加上dataType: 'json'让jQuery自动解析JSON,省去手动解析的步骤:

$(document).ready(function() { 
  $("#ddlcomp").change(function() { 
    var cid = $("#ddlcomp").val(); 
    $.ajax({ 
      url: 'doload.php', 
      method: 'post', 
      data: 'catid=' + cid,
      dataType: 'json' // 自动解析JSON,无需手动JSON.parse
    }).done(function(rows) { 
      console.log(rows); 
      $('#ddlsubcat').empty(); 
      // 直接遍历数组元素
      rows.forEach(function(row) { 
        // 注意确认row里的属性名是否和后端返回的完全一致(比如有没有拼写错误)
        $('#ddlsubcat').append('<option>' + row.subcat + '</option>'); 
      }) 
    }) 
  }) 
})

情况二:返回的是键值对对象

如果后端返回的是类似{"id1":"分类1", "id2":"分类2"}的结构,那应该这样遍历:

Object.keys(rows).forEach(function(key) { 
  // rows[key]才是对应的分类名称,key可以作为option的value值
  $('#ddlsubcat').append('<option value="' + key + '">' + rows[key] + '</option>'); 
})

3. 额外排查点

  • 检查后端doload.php返回的JSON格式是否正确,有没有语法错误(比如逗号遗漏、引号不匹配)。
  • 确认后端返回的属性名是否和你前端用的subcat完全一致(比如后端可能是sub_cat或者Subcat,大小写、下划线要严格对应)。
  • 可以在遍历里加console.log(row)(数组情况)或者console.log(rows[rowss])(键值对情况),直观确认是否能拿到正确的属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:45:23