【问题标题】:DataTable ajax reload is not workingDataTable ajax 重新加载不起作用
【发布时间】:2023-03-11 11:50:01
【问题描述】:

我尝试了各种方法在 ajax 查询后重新加载我的数据表。但是,它只是行不通。我试过table.ajax.reload()table.api().ajax.reload(),在datatable()DataTable()之间切换。他们只是不工作。

$(document).ready(function() {
    var table = $('#organizationTable').DataTable();

    $(document).on('click', '.edit-modal', function() {
        $('.modal-title').text('Edit User');
        $('#id_edit').val($(this).data('id'));
        $('#first_name_edit').val($(this).data('first_name'));
        $('#last_name_edit').val($(this).data('last_name'));
        $('#email_edit').val($(this).data('email'));
        $('#user_role_edit').val($(this).data('role_id'));
        $('#user_status_edit').val($(this).data('status_id'));
        id = $('#id_edit').val();
        $('#editModal').modal('show');
    });

    $('.modal-footer').on('click', '.edit', function() {
        if ( $( ".required" ).val().length === 0 ) {

            // Usually show some kind of error message here

            // Prevent the form from submitting
            $('#editModal').modal('show');
            event.preventDefault();
        } else {
            $.ajax({
                type: 'PUT',
                url: '/users/' + id + '/update',
                data: {
                    'id': $("#id_edit").val(),
                    'first_name': $("#first_name_edit").val(),
                    'last_name': $("#last_name_edit").val(),
                    'email': $("#email_edit").val(),
                    'role_id': $("#user_role_edit").val(),
                    'status_id': $("#user_status_edit").val()
                },
                success: function(data) {
                    console.log(data);
                    table.ajax.reload();
                }
            });
        }

    });
} );

我在标题中也有一段启动代码。

$( document ).ready(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        dataType: 'json'
    });
});

【问题讨论】:

    标签: jquery ajax datatable


    【解决方案1】:

    重新加载数据表的正确方法是

    $('#TableID').DataTable().ajax.reload();
    

    【讨论】:

    • 我认为这可行,但我收到一条错误消息,提示 DataTables 警告:table id=organizationTable - Invalid JSON response。我认为我的表有问题导致了问题。
    • 我将发布另一个与此相关的问题。
    • 检查返回数据和数据表设置。由于 JSON 无效的错误,它还为您提供了故障排除链接。
    • 我在这里发布了一个更新的问题,你能看一下吗?
    【解决方案2】:

    您在问题中添加的一段代码。

    在您定义的 Datatable 中不包含您的 ajax url 或 Json。

    应该是这样的

    $(document).ready(function() {
        var table = $('#organizationTable').DataTable({
            ajax: "https://api.myjson.com/bins/897v1",
        });
    
    
        $('#proces_input').on('click', function() {
            table.ajax.reload(); // reload
        });
    });
    

    你可以参考更多例子here

    【讨论】:

      【解决方案3】:

      当我从 AJax 成功更新表单并重新加载数据表时,我将收到一条错误消息,提示 DataTables 警告:表 id=organizationTable - 无效的 JSON 响应。我认为原因是因为我返回了一些与我的数据表格式不匹配的数据。有没有办法可以检查我的数据表的 json 格式?因此,我可以尝试为更新的用户创建一个匹配格式的数组,并将其作为 json 格式返回。或者我正在寻找错误的方向。谢谢各位。

      控制器

      public function update(Request $request, $id)
          {
              $user = User::find($id);
      
              request()->validate([
                  'first_name' =>'required',
                  'email' => ['required', Rule::unique('users')->ignore($user)],
              ]);
      
              $user->update($request->all());
      
              DB::table('model_has_roles')
                  ->where('model_id', $user->id)
                  ->update(['role_id' => $request->role_id]);
      
              $request->session()->flash('success', $user->first_name . ' is updated successfully.');
      
              return response()->json($user);
          }
      

      数据表视图

      <table id="organizationTable" class="table table-striped table-bordered">
              <thead>
              <tr>
                  <th>Name</th>
                  <th>Email</th>
                  <th>Role Name</th>
                  <th>Status</th>
                  <th>Action</th>
              </tr>
              </thead>
              <tbody>
              @foreach($rainman_users as $rainman_user)
                  <tr>
                      <td style="vertical-align: middle">{{$rainman_user->first_name}} {{$rainman_user->last_name}}</td>
                      <td style="vertical-align: middle">{{$rainman_user->email}}</td>
                      <td style="vertical-align: middle">{{$rainman_user->getRoleNames()->implode(', ')}}</td>
                      @if($rainman_user->status_id == 1)
                          <td class="text-success" style="text-align: center; font-style: italic; vertical-align: middle; font-weight: bold;">{{$rainman_user->userStatus->name}}</td>
                      @else
                          <td class="text-danger" style="text-align: center; font-style: italic; vertical-align: middle; font-weight: bold;">{{$rainman_user->userStatus->name}}</td>
                      @endif
                      <td style="text-align:center;">
                          <button data-toggle="modal" data-target="#editModal" class="edit-modal btn btn-outline-primary"
                                  data-id="{{$rainman_user->id}}" data-first_name="{{$rainman_user->first_name}}"
                                  data-last_name="{{$rainman_user->last_name}}" data-email="{{$rainman_user->email}}"
                                  data-role_id="{{$rainman_user->getRoleIds()->first()}}"
                                  data-status_id="{{$rainman_user->userStatus->id}}">
                                  <i class="fa fa-pencil-square-o" aria-hidden="true"></i> Detail
                          </button>
                      </td>
                  </tr>
              @endforeach
              </tbody>
              <tfoot>
              <tr>
                  <th>Name</th>
                  <th>Email</th>
                  <th>Role Name</th>
                  <th>Status</th>
                  <th>Action</th>
              </tr>
              </tfoot>
          </table>
      

      JavaScript

      $(document).ready(function() {
          $('#organizationTable').DataTable({
          });
      
          $(document).on('click', '.edit-modal', function() {
              $('.modal-title').text('Edit User');
              $('#id_edit').val($(this).data('id'));
              $('#first_name_edit').val($(this).data('first_name'));
              $('#last_name_edit').val($(this).data('last_name'));
              $('#email_edit').val($(this).data('email'));
              $('#user_role_edit').val($(this).data('role_id'));
              $('#user_status_edit').val($(this).data('status_id'));
              id = $('#id_edit').val();
              $('#editModal').modal('show');
          });
      
          $('.modal-footer').on('click', '.edit', function() {
              $.ajax({
                  type: 'PUT',
                  url: '/rainman-users/' + id + '/update',
                  data: {
                      'id': $("#id_edit").val(),
                      'first_name': $("#first_name_edit").val(),
                      'last_name': $("#last_name_edit").val(),
                      'email': $("#email_edit").val(),
                      'role_id': $("#user_role_edit").val(),
                      'status_id': $("#user_status_edit").val()
                  },
                  success: function(data) {
                      console.log(data);
                      $('#organizationTable').DataTable().ajax.reload();
                  }
              });
          });
      } );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-19
        相关资源
        最近更新 更多