【问题标题】:How do we prevent ajax from triggering when searching using jQuery Datatable?使用 jQuery Datatable 搜索时如何防止触发 ajax?
【发布时间】:2019-03-08 15:21:12
【问题描述】:

我用 ajax 创建了一个 jQuery 数据表。我希望在页面更改和加载期间触发 ajax;但是我想实现简单的智能搜索,而不需要在搜索时触发 ajax。

有什么方法可以禁用 ajax 来进行搜索?我已经尝试如下自定义过滤。但是,它仍然无法正常工作。请提出建议。

$('#table').DataTable({
            dom: '<"top-filter row"<"col-md-5 no-pad-l"f><"col-md-6 pagination-margin no-pad-r"p><"cog-drop cog-width"B>><"table-body row"t>r<"row"i>',
            scrollY:"200px",
            pagingType: "full_numbers",
            scrollCollapse: true,
            searching: false,
            columns: columns,
            pageLength:100,
            lengthMenu: [
                [10, 20, 50, 100],
                ['10 items', '20 items', '50 items', '100 items']
            ], buttons: [
                {
                    extend: 'pageLength',
                    text: '<i class="fa fa-cog"></i>',
                    className:"bs-pageLength"
                }],
            language: {
                "emptyTable": "No data available",
                "lengthMenu": "_MENU_",
                "sInfo": "Records: _START_-_END_ of _TOTAL_",
                "sInfoFiltered": "",
                oPaginate: {
                    sNext: '<i class="fa fa-angle-right"></i>',
                    sPrevious: '<i class="fa fa-angle-left"></i>',
                    sFirst: '<i class="fa fa-angle-double-left"></i>',
                    sLast: '<i class="fa fa-angle-double-right"></i>'
                },buttons: {
                    pageLength: '<i class="fa fa-cog"></i>'
                }
            },
            serverSide: true,
            ajax: {
                url: url,
                data: function (d) {
                    $.blockUI();
                    var data = {};
                    data["page"] = (d.start==0?d.start:Math.floor(d.start/d.length))+1;
                    data["pageSize"] = d.length;
                    data["uniqueKey"] = fieldId;

                    return data;
                },
                dataSrc: function (json) {
                    $.unblockUI();
                    return json.data;
                }
            },
            initComplete : function() { $.unblockUI();}
        });


 $.fn.dataTable.ext.search.push(
            function( settings, data, dataIndex ) {
                var val=$("#searchArea").val();
                if (data[0].indexOf(val)!=-1 || data[1].indexOf(val)!=-1 || data[2].indexOf(val)!=-1){
                    return true;
                }
                return false;
            }
        );
        $('#searchArea').keyup( function() {
            table.draw();
        });

HTML:

<div><input type="text" id="searchArea" name="searchArea"></div>

我们将不胜感激。提前致谢。

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 您可以禁用数据表搜索并实现您的自定义搜索datatables.net/reference/option/searching
  • @CodeThing 仍然没有运气。我已经用最新的代码更新了帖子。
  • 你不能。您唯一的选择是通过 jQuery 过滤行。
  • 因为是服务端,所以table.draw会一直调用ajax重绘表格。

标签: jquery search datatable


【解决方案1】:

是的,设置 serverSide: false,然后您可以使用另一种 ajax 方法获取您的数据,并在第二次请求完成时为您的数据表播种。

类似这样的:

$.ajax({
    type: "Post",
    url: "/Someting",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        if ($.fn.dataTable.isDataTable('.table')) table.destroy();
        table = $('.table').DataTable({
            "aaData": data,
            "aoColumns": [{ "data": "something" }, { "data": "somethingElse" }]
        });
    },
    error: function (err) {
        alert(err);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多