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

Laravel中DataTable分页后Ajax调用无法获取数据库记录

问题描述

我是Laravel开发新手,使用DataTable展示数据库中的注册用户列表。点击列表中的「View Details」按钮时,会通过Ajax调用根据用户ID获取单用户详情。当前问题是:在DataTable第一页时点击按钮Ajax调用正常,但切换到第二页或通过搜索框搜索用户后点击按钮,Ajax调用无法执行,且控制台无报错信息。


HTML代码

<meta name="_token" content="{{ csrf_token() }}">
<table id="user_table" class="table  table-row-bordered gy-5 gs-7">
  <thead>
    <tr class="fw-bold fs-6 text-gray-800">
      <th>ID</th>
      <th>Name</th>
      <th>Email</th>
      <th>Action</th>
   </tr>
 </thead>
 <tbody>
   @foreach ($register_users as $value)
    <tr>
       <td>{{ $value->id }}</td>
       <td>{{ $value->name.' '.$value->lname }}</td>
       <td>{{ $value->email }}</td>
       <td style="display: inline-flex;">
       <a href="javascript:void(0)" data-id="{{ $value->id }}"  data-bs-toggle="modal" data-bs-target="#activateModal" class="viewDetailModal btn btn-warning btn-hover-rise me-5 btn-sm" style="margin: 1px">View Details</a>
       </td>
   </tr>
  @endforeach
 </tbody>
</table>

jQuery代码

$(".viewDetailModal").click(function(e) {

     e.preventDefault();

     var customer_id = $(this).data('id');
     var _token = $("input[name='_token']").val();

     $.ajax({
        url: "{{ route('get.user.details') }}",
        type: 'POST',
        data: {_token:_token, customer_id:customer_id},
        success: function (response){
            console.log(response);

            if(response.lname)
              {
                 response.lname = response.lname;
              }
              else
              {
                 response.lname = '';
              }

           $('#user_id').text(response.id);
           $('#user_name').text(response.name+' '+response.lname);
           $('#user_email').text(response.email);
           $('#user_mobile_no').text(response.mobile_no);
           $('#user_cnic_no').text(response.cnic_no);
           $('#user_passport_no').text(response.passport_no);
           $('#user_country_id').text(response.country_id);
           $('#user_city_id').text(response.city_id);        
            
        }
    });
  });

DataTable代码

$("#user_table").DataTable({
        "order": [[ 0, "desc" ]],
         "language": {
         "lengthMenu": "Show _MENU_",
         },
         "dom":
         "<'row'" +
         "<'col-sm-6 d-flex d-none d-sm-none d-md-block align-items-center justify-content-md-start'l>" +
         "<'col-12 col-sm-6 d-flex align-items-center justify-content-md-end'f>" +
         ">" +

         "<'table-responsive'tr>" +

         "<'row'" +
         "<'col-sm-12 col-md-5 d-flex align-items-center justify-content-center justify-content-md-start'i>" +
         "<'col-sm-12 col-md-7 d-flex align-items-center justify-content-center justify-content-md-end'p>" +
         ">"
 });

解决方案

问题根源是事件绑定范围:你用的直接绑定方式只会给页面初始化时已存在的元素绑定事件,但DataTable分页、搜索时会动态生成新的DOM节点(第二页或搜索结果的行都是新创建的),这些新元素不会自动带上之前绑定的点击事件。

解决方法是改用事件委托,把事件绑定到一个始终存在的父容器上(比如表格本身),再指定触发事件的子元素选择器。同时修正一个CSRF token获取的错误(原代码用input标签取,但实际是meta标签):

// 事件委托绑定点击事件
$("#user_table").on("click", ".viewDetailModal", function(e) {
    e.preventDefault();

    var customer_id = $(this).data('id');
    var _token = $("meta[name='_token']").val(); // 修正token获取方式

    $.ajax({
        url: "{{ route('get.user.details') }}",
        type: 'POST',
        data: {_token:_token, customer_id:customer_id},
        success: function (response){
            console.log(response);

            // 简化空值判断逻辑
            var lname = response.lname || '';

            $('#user_id').text(response.id);
            $('#user_name').text(response.name + ' ' + lname);
            $('#user_email').text(response.email);
            $('#user_mobile_no').text(response.mobile_no);
            $('#user_cnic_no').text(response.cnic_no);
            $('#user_passport_no').text(response.passport_no);
            $('#user_country_id').text(response.country_id);
            $('#user_city_id').text(response.city_id);        
        }
    });
});

这样不管DataTable怎么动态刷新内容,点击事件都能正常触发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:15:34