ajax提交后刷新dataTable

Posted

技术标签:

【中文标题】ajax提交后刷新dataTable【英文标题】:Refresh dataTable after ajax submit 【发布时间】:2020-02-06 11:50:03 【问题描述】:

目前我的dataTable jquery 正在从compact 获取数据

我的刀片:task.blade.php

                    $.ajax(
                        headers:'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
                        url: " route('task_save') ",
                        method: "POST",
                        data:
                            proceed:"TRUE",
                            task_title:task_title,
                            weight:weight,
                            desc:desc
                        , 
                        dataType: "json",
                        success:function(data)
                        
                            if(data.success.length > 0)
                                refreshTable();
                                toastr.success(data.success[0]);
                                // alert(data.success[0]);              
                            else
                                toastr.error(data.error[0]);
                                // alert(data.error[0]);
                            
                        ,
                        error: function(xhr, ajaxOptions, thrownError)
                            console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                        
                    );  

我的任务控制器

$task_record = TaskModel::orderBy('created_at','desc')
->get();

return view('admin.task', compact('task_record'))->render();

在我的task.blade.php 中使用了这个include('admin.taskDatatable')

因为我的数据表是在这个文件中编码的:taskDatatable.blade.php

这是我的 taskDatatable.blade.php

<table id="dtMaterialDesignExample" class="table table-striped" cellspacing="0" >
    <thead>
        <tr>
        <th class="th-sm">Task Title
        </th>
        <th class="th-sm">Task Description
        </th>
        <th class="th-sm">Weight %
        </th>
        <th class="th-sm">Created By
        </th>
        <th class="th-sm">Created Date
        </th>
        <th class="th-sm">Action
        </th>

        </tr>
    </thead>
    <tbody id="taskRcrd">
            @if(count($task_record) > 1)
            @foreach($task_record as $field)
            <tr>
            <td>$field->task_title</td>
            <td>$field->task_desc</td>
            <td>$field->weight</td>
            <td>$field->updated_by</td>
            <td>$field->created_at</td>
            <td></td>
            </tr>
            @endforeach
            @else
            <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            </tr>
            @endif
    </tbody>

    </table>

这是我的refreshTable()

 <script>
 function refreshTable() 
     $("#dtContainer" ).load(" #dtMaterialDesignExample");
 
 </script>

我正在尝试在ajax成功后刷新dataTable

数据表刷新正常,但整个数据表不再像pagination, search text, show entries那样工作,这意味着数据表的所有功能都无法正常工作,但数据成功刷新。

更新

尝试此代码后

<script>
 function refreshTable() 
$("#dtMaterialDesignExample").DataTable().ajax.reload()

</script>

【问题讨论】:

我知道的最好的方法是最初用 JS 加载数据,也许你可以使用 ajax 调用来加载数据。这样,当您执行更新时,只需调用加载数据的函数 你可以参考一些链接吗? reload datatable after ajax success的可能重复 【参考方案1】:

试试这个。

function refreshTable()
    $("#dtMaterialDesignExample").DataTable().ajax.reload();

而且你不需要为它制作函数,你可以直接在success函数中调用它

success:function(data)

    if(data.success.length > 0)
        $("#dtMaterialDesignExample").DataTable().ajax.reload();
        toastr.success(data.success[0]);

    else
        toastr.error(data.error[0]);

    
,

查看更多关于ajax.reload()ajax.reload()的信息

用ajax检查reload-refresh-table-after-event

【讨论】:

当您更新问题时,我看到您正在加载表。您的数据来自 PHP 而不是从 ajax 加载页面。因此,ajax.reload(); 函数在您的数据表加载了 ajax 时有效。如果您使用 laravel,请尝试使用 Yajra 数据表,它会为您创建 JSON。yajrabox.com/docs/laravel-datatables/master/installation【参考方案2】:

你可以这样做:

function refreshTable()
var table =  $('#tableId');
table.DataTable().ajax.reload();

【讨论】:

DataTables 警告:表 id=dtMaterialDesignExample - JSON 响应无效。有关此错误的更多信息,请参阅datatables.net/tn/1 给我一个错误 你确定 id 是 'dtMaterialDesignExample'? 在我已经发布的代码中是的。 id="dtMaterialDesignExample'" 请用数据表代码更新问题 检查更新的问题以查看图像以及我尝试过的内容【参考方案3】:

试试这个:

success: function (data) 
    $('#form').trigger("reset");

https://www.tutsmake.com/laravel-5-8-datatables-ajax-crud-tutorial/

【讨论】:

以上是关于ajax提交后刷新dataTable的主要内容,如果未能解决你的问题,请参考以下文章

ajax提交数据以后刷新当前页面,怎么实现

ajax提交后刷新dataTable

Ajax - 提交后如何刷新 <DIV>

如何在 Ajax 刷新或提交到数据库后将计数器重置为 0,

ajax提交与普通表单提交的优缺点

什么是AJAX,列举AJAX的常见应用