过滤数据表时出现“oTable.draw is not a function”错误如何解决?

问题描述 投票:0回答:1

我在数据表上方有一个搜索表单。当我尝试搜索时,我得到的数据以 JSON 格式显示,而不是过滤数据表。错误是

未捕获类型错误:oTable.draw 不是函数

这是 JavaScript:

$(document).ready(function(){
    var oTable = $('#surat').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: '{!! route("surat") !!}',
            data: function (d) {
                d.jenis_surat = $('input[name=jenis_surat]').val();
                d.nomor_surat = $('input[name=nomor_surat]').val();
                d.perihal = $('input[name=perihal]').val();
            }
        },
        columns: [
            {data: 'no', name: 'no'},
            {data: 'jenis_surat', name: 'jenis_surat'},
            {data: 'nomor_surat', name: 'nomor_surat'},
            {data: 'perihal', name: 'perihal'},
            {data: 'status', name: 'status'}
        ]
    });

    $('#search_form').on('submit', function(e) {
        oTable.draw();
       e.preventDefault();
    });
  });

这是控制器:

public function carisuratdata(Request $request)
{
    $surats = Surat::select(['id_surat', 'id_jenis_surat', 'nomor_surat','perihal', 'tanggal_surat', 'masa_berlaku_from', 'masa_berlaku_to', 'ringkasan', 'tag', 'id_publish', 'tanggal_publish'])->get();

    return Datatables::of($surats)
        ->filter(function ($instance) use ($request) {
            if ($request->has('jenis_surat')) {
                $instance->collection = $instance->collection->filter(function ($row) use ($request) {
                    return Str::contains($row['jenis_surat'], $request->get('jenis_surat')) ? true : false;
                });
            }

            if ($request->has('nomor_surat')) {
                $instance->collection = $instance->collection->filter(function ($row) use ($request) {
                    return Str::contains($row['nomor_surat'], $request->get('nomor_surat')) ? true : false;
                });
            }
            if ($request->has('perihal')) {
                $instance->collection = $instance->collection->filter(function ($row) use ($request) {
                    return Str::contains($row['perihal'], $request->get('perihal')) ? true : false;
                });
            }
        })

        ->make(true);

}

这是 JSON:

javascript jquery datatable datatables filtering
1个回答
0
投票

在使用

draw
之前,需要调用
search
order
等操作。而
draw
只是重绘表格,不会从服务器端更新数据。检查代码后,您的目的是从服务器端重新获取数据。因此,您需要使用
oTable.ajax.reload();
重新从服务器获取数据。

欲了解更多信息:

Ajax 重新加载: https://datatables.net/reference/api/ajax.reload()

画: https://datatables.net/reference/api/draw()

© www.soinside.com 2019 - 2024. All rights reserved.