数据表重新加载失败

DataTables Reloads unsuccessful


我正在使用以下 CDN 版本的 Datatables (https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js)
像这样在页面底部加载:

<script type="application/javascript"
            src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js">
 </script>
 <script type="text/javascript">
        $(document).ready(function() {
            // On page load: datatable
            var plugins_table=$('.plugins_table').DataTable({
                "ajax":"indexAjax.php?p=listPluginsforSite",
                "columns":[
                    {"data":"plugin_name"},
                    {"data":"plugin_site_version"},
                    {"data":"plugin_uptodate_status"},
                    {"data":"plugin_activate_choice"},
                    {"data":"plugin_install_choice"}
                ],
                "language": {
                processing: "Traitement en cours...",
                search: "Rechercher&nbsp;:",
                lengthMenu: "Afficher _MENU_ Plugins",
                info: "Affichage du Plugin _START_ &agrave; _END_ sur _TOTAL_ ",
                infoEmpty: "Affichage du Plugin 0 &agrave; 0 sur 0 ",
                infoFiltered: "(filtr&eacute; sur _MAX_ Plugins au total)",
                infoPostFix: "",
                loadingRecords: "Chargement en cours...",
                zeroRecords: "Aucun Plugins &agrave; afficher",
                emptyTable: "Aucune donnée disponible dans le tableau",
                paginate: {
                    first: "Premier",
                    previous: " Pr&eacute;c&eacute;dent",
                    next: "Suivant  ",
                    last: "Dernier"
                },
                aria: {
                    sortAscending: ": activer pour trier la colonne par ordre croissant",
                    sortDescending: ": activer pour trier la colonne par ordre décroissant"
                }
            },
                paging: true,
                autoWidth: false,
                responsive: true,
                pagingType: "full_numbers",
            });
        // This event is triggered by a button with class '.activate_state' on each row...
        $('#plugins_table tbody').on('click', '.activate_choice', function () {
            var plugin_id=$(this).data("id") ;
            var plugin_active_state=$(this).data("active-state");
            var request   = $.ajax({
                url:          'indexAjax.php?p=togglePluginActiveState',
                data:         {plugin_id:plugin_id,active_state:plugin_active_state},
                dataType:     'json',
                type:         'post'
            });
            request.done(function(response){
            if (response.result == 'success') {
                // Reload datable: NEITHER commented solutions work !
                //plugins_table.api().ajax.reload();
                //plugins_table.DataTable().ajax.reload();
            }
        });
        });
        });
    </script>



当我对页面进行 'manual' 重新加载/刷新时,table/页面会使用正确的数据/更改重新加载,但我无法让 API 重新加载 [=26] =] 成功 ajax 调用后...

出于某种原因,按照以下方法重命名数据table 对我有用:

$('.plugins_table').DataTable().ajax.reload();

代替之前的:

plugins_table.DataTable().ajax.reload();

其中“plugins_table”是 table 的初始命名变量。

我对这种“行为”的解释感兴趣...!

在第一行中您使用了 api(),但这仅在您使用 .dataTable() 语法初始化数据表时才需要(注意小的 'd')。因为您正在使用 .DataTable 语法(使用 capital 'D'),所以您已经在使用 DataTables api.

在第二行中,您试图重新初始化数据表,但 plugins_table 已经作为数据表存在。相反,像这样刷新它:

plugins_table.ajax.reload();