首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能在第二次调用ajax按钮上单击使用DataTable服务器端脚本

未能在第二次调用ajax按钮上单击使用DataTable服务器端脚本
EN

Stack Overflow用户
提问于 2019-04-17 09:11:00
回答 2查看 1.5K关注 0票数 1

我使用datatable和服务器端脚本显示记录按钮点击。第一次单击按钮时,我得到了正确的响应,但第二次单击按钮时,ajax正在调用。

我也使用了一个抽签函数。

我的ajax调用js文件:

代码语言:javascript
复制
$(document).on('click' , '.search-btn', function(){

var shape = "";
jQuery(".diamond_shape.diamond_selected").each(function () {
    shape += jQuery(this).attr("title") + ",";
});

var clarity = '';
jQuery("#select-clarity").each(function () {
    clarity += jQuery(this).attr("value") + ",";
});

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
var dataTable = $('#example').DataTable( {
        processing: true,
        serverSide: true,
        retrieve: true,
        searching: false,   
        paging: false,
        dataType: "json",
        contentType: "application/json",
        "ajax":{
            "url" : ajaxurl, // json datasource 
            "type": "POST",
            "data": {action: 'getFilterDiamonds',dataShape: shape , dataClarity : clarity },
        },
        "columns": [
            {"data": "reportNo"},
            {"data": "reference"},
            {"data": "shape"},  
            {"data": "lab"},
            {"data": "weight"},
            {"data": "color"},
            {"data": "clarity"}
        ]
    });
    });

如何在输入值属性中添加选定的筛选值:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-18 04:22:30

  • 终于找到了解决办法。单击“搜索”按钮时只想销毁datatable。这是我的更改代码。
代码语言:javascript
复制
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";

$(document).on('click' , '.search-btn', function(){

    var shape = "";
    jQuery(".diamond_shape.diamond_selected").each(function () {
        shape += jQuery(this).attr("title") + ",";
    });

    var clarity = '';
    jQuery("#select-clarity").each(function () {
        clarity += jQuery(this).attr("value") + ",";
    });

    /*- code to destory datatable -*/
    if ($.fn.dataTable.isDataTable('#example')) {
        $('#example').DataTable().destroy();
    }   
    /*---*/

    var dataTable = $('#example').DataTable( {
        "scrollX": true,
        processing: true,
        serverSide: true,
        retrieve: true,
        searching: false,
        destroy: true,  
        paging: false,
        dataType: "json",
        contentType: "application/json",
        "ajax":{
            "url" : ajaxurl, // json datasource 
            "type": "POST",
            "data": {action: 'getFilterDiamonds',dataShape: shape , dataClarity : clarity },
        },
        "columns": [
            {"data": "reportNo"},
            {"data": "reference"},
            {"data": "shape"},  
            {"data": "lab"},
            {"data": "weight"},
            {"data": "color"},
            {"data": "clarity"}
        ]
    });


});

使用下面的代码datatable将删除旧数据,并使用过滤器加载新数据。必须在datatable函数中设置destroy: true

代码语言:javascript
复制
if ($.fn.dataTable.isDataTable('#example')) {
        $('#example').DataTable().destroy();
    }

谢谢大家的快速反应。

票数 1
EN

Stack Overflow用户

发布于 2019-04-17 11:04:15

您已经初始化了click事件上的Datatable,这是第二次单击不起作用的根本原因。此外,请检查浏览器控制台,您应该得到一些错误在那里。

请参考Reload Ajax request with new parameters并根据您的需要重构代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55723940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档