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

JQuery $.each遍历JSON数据失败,无法动态生成复选框求助

问题分析与解决方案

你的代码里有几个关键错误导致遍历失败,我来一步步帮你修正:

1. 遍历对象错误

你返回的colours是一个数组(包含多个颜色对象),但你写的是$.each(colours.id, ...)——colours是数组,根本没有id属性,所以这个遍历的目标是undefined,自然会出错。应该直接遍历colours这个数组本身。

2. 变量名冲突

循环回调里的参数你用了colours,和外部接收响应的变量名重名了,这会导致内部的colours覆盖外部的数组,无法正确访问每个颜色对象的属性。建议把内部参数改成colour(单数)更清晰。

3. 属性名大小写不匹配

返回的JSON里键是Id(大写I)和Name,但你代码里用的是colours.id(小写i),这会取不到对应的值,导致复选框的id、value和显示文本都不对。

4. 无需手动解析JSON

你已经设置了dataType: 'json',jQuery会自动把响应内容解析成JavaScript对象/数组,所以不需要再用jQuery.parseJSON(colours),反而会出问题。


修正后的代码

$.ajax({
  url: "Home/Colours",
  type: 'GET',
  contentType: "application/json; charset=utf-8",
  dataType: 'json',
  success: function (colours) {
    // 直接遍历colours数组,内部参数用单数colour避免冲突
    $.each(colours, function (i, colour) {
      // 使用正确的大写Id和Name属性,同时用模板字符串让代码更易读
      const checkboxHtml = `<p><input type='checkbox' id='box${colour.Id}' value='${colour.Id}' class='checkbox'>${colour.Name}</p>`;
      $('#ColourCheck').append(checkboxHtml);
    });
  },
  // 建议加上错误回调,方便调试请求失败的情况
  error: function(xhr, status, error) {
    console.error('请求颜色数据失败:', error);
  }
});

额外优化建议

  • 使用ES6的模板字符串(反引号`)代替字符串拼接,代码更清晰,也避免了引号转义的问题。
  • 加上error回调,方便排查请求本身的错误(比如控制器路由不对、返回数据格式错误等)。
  • 如果颜色数量较多,建议先把所有HTML字符串拼接好,再一次性append到DOM里,减少DOM操作次数,提升性能:
success: function (colours) {
  let html = '';
  $.each(colours, function (i, colour) {
    html += `<p><input type='checkbox' id='box${colour.Id}' value='${colour.Id}' class='checkbox'>${colour.Name}</p>`;
  });
  $('#ColourCheck').html(html); // 用html()代替多次append()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:35:45