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

使用jQuery向控制器提交数组,返回行数正确但每行均为null的问题求助

解决jQuery提交数组到控制器后每行数据为空的思路

这种情况我之前踩过好几次坑,大概率是数据序列化/后端模型绑定不匹配导致的,给你几个具体的排查方向:


1. 先确认前端发送的实际数据结构

别光靠alert看单个值,打开浏览器F12的「Network」面板,找到提交的POST请求,查看「Request Payload」(JSON格式)或「Form Data」(表单格式):

  • 如果 payload 里每行数据本来就是空的:那问题出在前端动态收集表格数据的代码,比如获取input值时选择器写错了、动态生成的元素name属性不对。
  • 如果 payload 数据是完整的:那问题就出在后端的模型绑定逻辑。

2. 检查前端提交的格式与contentType匹配

两种常见提交场景的正确配置:

场景一:用JSON格式提交(推荐)

如果后端接收的是JSON数组,一定要在$.ajax里指定contentType,并且把数组转成JSON字符串:

var tableData = [];
// 假设从动态表格收集数据的逻辑
$('.table-row').each(function() {
  tableData.push({
    Id: $(this).find('.id-input').val(),
    Name: $(this).find('.name-input').val()
    // 注意键名要和后端模型的属性名完全一致(包括大小写!)
  });
});

$.ajax({
  url: '/YourController/SaveData',
  type: 'POST',
  contentType: 'application/json; charset=utf-8', // 必须指定
  data: JSON.stringify(tableData), // 必须转成JSON字符串
  success: function(res) {
    console.log(res);
  }
});

场景二:用表单格式提交

如果用传统表单格式提交数组,动态生成的input的name属性必须遵循索引格式:

// 动态生成表格行时,给input设置name
var rowIndex = 0;
$('.add-row-btn').click(function() {
  var newRow = `<tr>
    <td><input name="[${rowIndex}].Id" /></td>
    <td><input name="[${rowIndex}].Name" /></td>
  </tr>`;
  $('#dynamic-table').append(newRow);
  rowIndex++;
});

这种情况下$.ajax不需要指定contentType,直接提交表单数据即可。

3. 后端接收逻辑要正确

以ASP.NET Core为例:

如果是接收JSON数组,必须给参数加上[FromBody]特性,并且模型类的属性名要和前端键名完全匹配:

public class YourModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

[HttpPost]
public IActionResult SaveData([FromBody] List<YourModel> data)
{
    // 处理数据
    return Ok();
}

以Java Spring为例:

要使用@RequestBody注解,并且确保实体类有正确的getter/setter,或者用@JsonProperty指定前端对应的键名:

public class YourModel {
    private Integer id;
    private String name;

    // 必须有getter/setter
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

@PostMapping("/saveData")
public ResponseEntity<?> saveData(@RequestBody List<YourModel> data) {
    // 处理数据
    return ResponseEntity.ok().build();
}

4. 大小写敏感问题要注意

大部分后端框架的模型绑定是大小写敏感的!比如前端传name,后端模型是Name,就会导致绑定失败,每行数据都为空。一定要确保前后端的字段名完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:42:32