【问题标题】:DataTables forcing browser to cache dataDataTables 强制浏览器缓存数据
【发布时间】:2017-05-15 04:33:50
【问题描述】:

场景: - 文档加载函数执行 aJax 调用并返回 JSON > 工作正常 - DataTables 使用 aJax 返回数据来绘制表格 > 工作正常 - 浏览器单击事件执行另一个 aJax 调用返回相同的 JSON 格式但具有新/更新的值 > DataTables 继续使用在步骤 1 中收到的 JSON - 当我在“网络”选项卡上查看返回数据时,它会显示正确的最新数据 > 但是,console.log 继续使用第一个 aJax 返回的数据集 - 我在 aJax 调用、DataTables 初始化甚至 HTML 中的 meta http-equiv="cache-control" content="no-cache" /> 中使用了 "cache": false

function myFunc(inpData) {
    $.ajax({
       url: "http://xyz/yzx/zxy.php", 
       data: mydata,
       type: 'POST'
       dataType: 'json'
       cache: false,
    }).done(function(rdata) {
       console.log(rdata); 
       $('#my-table').DataTable({
                data: rdata.visitors,
                columns: [
                    {data: 'fullName'},
                    {data: 'company'},
                    {data: 'visiting'},
                    {data: 'phone'},
                    {data: 'checkIn'},
                    {data: 'checkOut'}
                ],
                rowCallback: function(row,data,index) {
                    if(data['active'] = 1) {                                
                            $('td:eq(5)', row).html("<button type='button' class='btn btn-default chk-out-btn'>Check Out Now</button>");
                            $(row).addClass("active-visitor").attr('unqid',data['id']);
                    } else {
                        $('td:eq(5)', row).html(data['checkOut']);
                        $(row).addClass('inactive-visitor').attr('unqid',data['id']); 
                    }
                }, // end rowCallback
                order: [[4, 'asc']],
                destroy: true,
                saveState: false,
                cache: false
            });
    });

    } //end myFunc 

现在当再次调用 myFunc(inpData) 时,执行 console.log(rdata) 会继续显示旧数据。当我在“网络”选项卡中查找返回数据时,它具有更新的数据。

会发生什么???

【问题讨论】:

  • 是否销毁之前的数据表并添加新的数据表?
  • 试试url: "http://xyz/yzx/zxy.php?v=" + new Date().getTime,
  • @madalin ivascu 是的,因此 DataTables 初始化 @J Santosh 中的 "destroy": true 选项;尝试了您的建议,但不起作用当再次进行 aJax 调用时,有一个 JSON 属性“活动”从 1 变为 0,浏览器继续将其控制台记录为 1,而“网络”选项卡显示为 0跨度>

标签: jquery datatables


【解决方案1】:

我终于修好了

if(data['active'] = 1) 

改为

if(data['active'] == 1) 

可能 DataTables 在 aJax 返回时将数字转换为字符串

【讨论】:

  • 有点晚了,但= 不是有效的运算符。它要么是==(等于)要么是===(等于并且来自相同的数据类型)
猜你喜欢
  • 2011-10-11
  • 2016-02-18
  • 1970-01-01
  • 2016-10-01
  • 2023-04-01
相关资源
最近更新 更多