导读:本期聚焦于小伙伴创作的《如何用jQuery动态获取表格行数据并发送到服务器》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用jQuery动态获取表格行数据并发送到服务器》有用,将其分享出去将是对创作者最好的鼓励。

在前端业务开发中,表格是展示结构化数据的常用组件,很多时候需要把用户选中的表格行数据提交到服务器进行处理,比如批量删除、状态更新、数据同步等场景,使用jQuery可以快速实现这一需求。

如何用jQuery动态获取表格行数据并发送到服务器

基础表格结构准备

首先我们需要有一个基础的表格结构,为了方便演示,这里构建一个包含复选框、用户信息的表格,实际开发中可以根据业务需求调整表格列的内容:

<table id="userTable" border="1" cellpadding="10" cellspacing="0">
  <thead>
    <tr>
      <th><input type="checkbox" id="checkAll">全选</th>
      <th>用户ID</th>
      <th>用户名称</th>
      <th>用户年龄</th>
      <th>用户状态</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><input type="checkbox" class="rowCheck"></td>
      <td>1001</td>
      <td>张三</td>
      <td>25</td>
      <td>正常</td>
    </tr>
    <tr>
      <td><input type="checkbox" class="rowCheck"></td>
      <td>1002</td>
      <td>李四</td>
      <td>28</td>
      <td>禁用</td>
    </tr>
    <tr>
      <td><input type="checkbox" class="rowCheck"></td>
      <td>1003</td>
      <td>王五</td>
      <td>22</td>
      <td>正常</td>
    </tr>
  </tbody>
</table>
<button id="submitBtn">提交选中数据</button>

实现全选与单选联动逻辑

在获取行数据之前,通常需要先实现表格的全选和单选联动功能,这样用户可以方便地选中需要提交的行,相关jQuery实现代码如下:

$(function() {
  // 全选复选框点击事件
  $('#checkAll').on('click', function() {
    // 让所有行的复选框状态和全选框保持一致
    $('.rowCheck').prop('checked', $(this).prop('checked'));
  });

  // 单行复选框点击事件
  $('.rowCheck').on('click', function() {
    // 判断当前选中的行数是否等于总行数,更新全选框状态
    let checkedCount = $('.rowCheck:checked').length;
    let totalCount = $('.rowCheck').length;
    $('#checkAll').prop('checked', checkedCount === totalCount);
  });
});

动态获取选中行的数据

完成选择逻辑后,就可以编写获取选中行数据的代码,我们需要遍历所有选中的行,提取每一行中单元格的文本内容,组装成结构化的数据:

function getSelectedRowData() {
  let selectedData = [];
  // 遍历所有选中的行
  $('#userTable tbody tr').has('.rowCheck:checked').each(function() {
    let row = $(this);
    // 提取当前行各个单元格的内容,注意跳过第一个复选框列
    let rowData = {
      userId: row.find('td').eq(1).text().trim(),
      userName: row.find('td').eq(2).text().trim(),
      userAge: row.find('td').eq(3).text().trim(),
      userStatus: row.find('td').eq(4).text().trim()
    };
    // 简单校验,跳过空数据行
    if (rowData.userId) {
      selectedData.push(rowData);
    }
  });
  return selectedData;
}

这里使用has('.rowCheck:checked')方法筛选出被选中的行,再通过eq()方法定位到对应索引的单元格,注意表格的td索引是从0开始的,第一个是复选框列,所以用户ID对应索引1,以此类推。如果单元格内有输入框等表单元素,可以把text()换成find('input').val()来获取输入值。

将数据发送到服务器

获取到结构化的行数据之后,就可以通过jQuery的$.ajax方法将数据发送到后端服务器,这里补充完整的提交逻辑,包含参数组装、请求发送和结果处理:

$(function() {
  $('#submitBtn').on('click', function() {
    let dataList = getSelectedRowData();
    // 校验是否有选中的数据
    if (dataList.length === 0) {
      alert('请先选中需要提交的行数据');
      return;
    }
    // 发送ajax请求到服务器
    $.ajax({
      url: 'https://api.ipipp.com/submitTableData', // 替换为实际的后端接口地址
      type: 'POST',
      contentType: 'application/json;charset=utf-8',
      data: JSON.stringify({
        submitTime: new Date().getTime(),
        dataList: dataList
      }),
      dataType: 'json',
      success: function(res) {
        if (res.code === 200) {
          alert('数据提交成功,共提交' + dataList.length + '条数据');
          // 提交成功后可以清空选中状态
          $('#checkAll').prop('checked', false);
          $('.rowCheck').prop('checked', false);
        } else {
          alert('提交失败:' + res.msg);
        }
      },
      error: function(err) {
        alert('请求服务器失败,请检查网络连接或接口地址');
        console.log('请求错误信息:', err);
      }
    });
  });
});

开发注意事项

  • 数据提取时要做好空值校验,避免出现空字符串或者undefined提交到服务器,影响接口处理逻辑。
  • 如果表格数据是动态加载的,需要把事件绑定换成事件委托的方式,比如$(document).on('click', '.rowCheck', function() { ... }),避免动态添加的行无法触发点击事件。
  • 发送请求前可以根据后端接口的要求转换数据格式,比如年龄字段如果是数字类型,可以用parseInt(rowData.userAge)做转换再提交。
  • 如果提交的数据量较大,可以考虑做分批提交处理,避免单次请求数据过大导致超时。

完整代码示例

将上述逻辑整合后,完整的可运行代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>jQuery获取表格行数据提交示例</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
  <table id="userTable" border="1" cellpadding="10" cellspacing="0">
    <thead>
      <tr>
        <th><input type="checkbox" id="checkAll">全选</th>
        <th>用户ID</th>
        <th>用户名称</th>
        <th>用户年龄</th>
        <th>用户状态</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><input type="checkbox" class="rowCheck"></td>
        <td>1001</td>
        <td>张三</td>
        <td>25</td>
        <td>正常</td>
      </tr>
      <tr>
        <td><input type="checkbox" class="rowCheck"></td>
        <td>1002</td>
        <td>李四</td>
        <td>28</td>
        <td>禁用</td>
      </tr>
      <tr>
        <td><input type="checkbox" class="rowCheck"></td>
        <td>1003</td>
        <td>王五</td>
        <td>22</td>
        <td>正常</td>
      </tr>
    </tbody>
  </table>
  <button id="submitBtn">提交选中数据</button>

  <script>
    $(function() {
      // 全选逻辑
      $('#checkAll').on('click', function() {
        $('.rowCheck').prop('checked', $(this).prop('checked'));
      });

      // 单选联动全选
      $('.rowCheck').on('click', function() {
        let checkedCount = $('.rowCheck:checked').length;
        let totalCount = $('.rowCheck').length;
        $('#checkAll').prop('checked', checkedCount === totalCount);
      });

      // 获取选中行数据
      function getSelectedRowData() {
        let selectedData = [];
        $('#userTable tbody tr').has('.rowCheck:checked').each(function() {
          let row = $(this);
          let rowData = {
            userId: row.find('td').eq(1).text().trim(),
            userName: row.find('td').eq(2).text().trim(),
            userAge: row.find('td').eq(3).text().trim(),
            userStatus: row.find('td').eq(4).text().trim()
          };
          if (rowData.userId) {
            selectedData.push(rowData);
          }
        });
        return selectedData;
      }

      // 提交数据
      $('#submitBtn').on('click', function() {
        let dataList = getSelectedRowData();
        if (dataList.length === 0) {
          alert('请先选中需要提交的行数据');
          return;
        }
        $.ajax({
          url: 'https://api.ipipp.com/submitTableData',
          type: 'POST',
          contentType: 'application/json;charset=utf-8',
          data: JSON.stringify({
            submitTime: new Date().getTime(),
            dataList: dataList
          }),
          dataType: 'json',
          success: function(res) {
            if (res.code === 200) {
              alert('数据提交成功,共提交' + dataList.length + '条数据');
              $('#checkAll').prop('checked', false);
              $('.rowCheck').prop('checked', false);
            } else {
              alert('提交失败:' + res.msg);
            }
          },
          error: function(err) {
            alert('请求服务器失败,请检查网络连接或接口地址');
            console.log('请求错误信息:', err);
          }
        });
      });
    });
  </script>
</body>
</html>

jQuery表格行数据获取ajax请求服务器数据提交前端数据处理修改时间:2026-06-03 01:38:12

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。