当前位置: 首页 > 知识库问答 >
问题:

数据表ajax。重载()和。clear()不工作

杨彦君
2023-03-14

我有一个标签部分创建与引导3.对于其中一个选项卡,选项卡内容是可数据的。数据在服务器端生成,在初始负载下工作正常。但是,我试图在onChange函数内部使用ajax.reload(),并且数据不刷新。我也尝试过使用Clear()方法,但是数据没有被清除。我已经验证了函数正在启动,并且返回的AJAX响应是有效的JSON,而不是空的。我的控制台没有错误,只是什么都没发生。

我使用的是Datatables 1.10,源代码直接来自cdn(https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js).

我在StackOverflow和Datatbles论坛上搜索过这个问题。其他人也有过,而公认的解决方案似乎是$(“#TableID”)。DataTable()。AJAX重新加载(),我正在执行此操作。我还尝试将数据表存储到var表和trying表中。AJAXreload(),并传入回调函数,并显式将页面刷新设置为true。我从回调函数返回日志,仍然没有错误,但没有更改。

超文本标记语言:

<div id="tab_datatable" class="tab-pane fade">          
    <table id="example" class="display" style="width:100%">
        <thead>
            <tr>
                <th>Year</th>
                <th>Course</th>
                <th>Title</th>
                <th>Enrollment</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>
</div>

我的js代码创建表,这工作正常:

$( document ).ready(function() {
    var $table = $('#example').DataTable({
    scrollCollapse: false,
    paging: true,
    pagingType: 'simple_numbers',
    lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, 'All']],
    processing: true,
    serverSide: true,
    ajax: {
        url: myURL,
        data: {
            campus: $campus.val(),
            college: $college.val(),
            year: $term.val(),
            draw: parseInt(1),
            length: (10),
            start: parseInt(1)
        }
    },
    searching: false,
    info: false,

});
});

该表在“示例”div中正确呈现。

我有一个updatePage()函数,当页面上的三个菜单选项中的一个发生更改时触发。

$(document).on('change', '.dynamic', function(){
    updatePage();
});

//Updates dynamic content on page
function updatePage()
{       
    //sessionStorage
    sesssionStateStorage('campus', $campus.val());
    sesssionStateStorage('college', $college.val());
    sesssionStateStorage('term', $term.val());

    console.log($term.val()); //confirming that value is updating

    //Refresh datatable
    console.log($table);  //Shows table object so I know it exists

   //$table.clear();   //This does't work;  no errors but no change
   //$table.ajax.reload() //doesn't work; no errors but no change
   //$('#example').DataTable().ajax.reload();  //doesn't work; no errors but no change
    $('#example').DataTable().ajax.reload(test(), true);  //Confirming that I see test logging from test() function, but data still doesn't update

}

function test()
{
   console.log('in test');
   console.log('table object: ' + $table)
}

非常感谢您的帮助。

编辑:忘了在控制台中监视网络调用,当其中一个菜单值更改时,我确实看到一个新的AJAX调用被触发并返回正确的数据。因此,问题似乎只是在ajax之后,表没有正确呈现。重新加载()。

共有1个答案

夏景胜
2023-03-14

在我的代码中,我不必要地包含了draw、length和start参数。我这样做是因为我注意到,当我尝试将数据参数作为函数返回时,这些项没有被传递(缺少这些参数导致我的数据库查询在后端失败),尽管文档中说Datatbles会自动发送它们。

发生这种情况是因为我没有将数据对象传递给我创建的函数。

这是我最初拥有的,并且这些值没有更新;每当我用桌子的时候。AJAX重新加载(),仍在传递初始数据:

ajax: {
    url: myURL,
    data: {
        campus: $campus.val(),
        college: $college.val(),
        year: $term.val()
    }
}

下面是我接下来尝试的内容,将参数作为函数返回:

ajax: {
    url: myURL,
    data: { function() {
               return { campus: $campus.val(), college: $college.val(), year: $term.val(),}

}

这就是我注意到绘制、开始和长度参数没有被传递的地方。最初的问题包括我尝试的另一个变体,我将把它放在这里,这样一切都清楚了。

ajax: {
    url: myURL,
    data: {
        campus: $campus.val(),
        college: $college.val(),
        year: $term.val(),
        draw: parseInt(1),
        length: (10),
        start: parseInt(1)
    }
},

以下是正确的方法:

    ajax: {
        url: myURL,
        data: function (d) {
            d.campus = $campus.val();
            d.college = $college.val();
            d.year = $term.val();
        }       
    }

因此,如果您在DataTables中使用服务器端处理,并且您在ajax调用更新中发送的数据参数,您确实需要将参数作为函数返回,以便每次使用<--plhd--0/进行新的ajax调用时它都会更新。>()(否则,您将继续传递初始数据)。但是,该函数应该传递DataTables的内部数据对象,因此当发出请求时,DataTables将随请求发送一些参数。发送的参数在这里的留档中详细说明:https://datatables.net/manual/server-side

 类似资料:
  • 问题内容: 我在一个选项卡中有一个数据表,该表是从索引方法上的控制器发送的数据中加载的。 我有加载数据表的视图 然后在加载页面时在javascript中加载数据表 我也有删除功能。如何在不重新加载页面的情况下重新加载数据(使用Ajax从控制器再次获取数据)? 问题答案:

  • 本文向大家介绍layui表格数据重载,包括了layui表格数据重载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了layui表格数据重载,供大家参考,具体内容如下 html代码 js代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我正在尝试从WepApi2控制器获取json响应 使用此项尝试获取数据。。。 我得到了这个... 阻止跨源请求:同一源策略不允许读取位于的远程资源https://api.mysite.com/api/Data/GetData.(原因:CORS标头“Access Control Allow Origin”与“*”不匹配) 我已经在网络上搜索了几乎所有我能找到的关于CORS和jQuery的信息,但我不

  • 我是JS的初学者,以前从未接触过PHP。经过几个小时的搜索,我拼凑出了这一块。我想做的是,有一个简单的表单,里面有几个字段,这些字段被保存到一个JSON文件中。我希望每个后续条目都附加到文件的末尾,这样每个JSON对象就是这个人的名字和他们的注释。 通过下面的代码,我已经成功地将一些东西传递给PHP脚本,并将条目追加到json文件中。但是在json文件中显示的是这样的(在两个条目之后): 这是我的

  • 当xhtml运行时,数据表会显示出来,但只有一列显示为可用于排序(即,标题中有向上/向下箭头图标)。 dataTable有两个问题: 只有一列(年份)显示为可用于排序。(Year是Car类中“int”类型的属性,而其他三列是String类型,因此问题的一个方面是String字段忽略了sortby=“#{Car.xxx}”标记。) 年份列实际上是不可排序的。点击年份标题的向上/向下箭头没有效果。当点

  • 本文向大家介绍vue.js 表格分页ajax 异步加载数据,包括了vue.js 表格分页ajax 异步加载数据的使用技巧和注意事项,需要的朋友参考一下 Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。 分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理。 1.注册一个组件 js 模板: H