2016-05-09 20 views
1

我在數據表上方有一個搜索表單。當我嘗試搜索時,我以JSON格式顯示數據,而不是過濾數據表。該錯誤是如何解決過濾數據表中的錯誤「oTable.draw不是函數」?

Uncaught TypeError: oTable.draw is not a function

這裏是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:
enter image description here

+0

嘗試'oTable.ajax.reload()' –

回答

0

之前喲你使用draw,它需要一個動作來調用,如searchorder等。draw只是重繪表,並不從服務器端更新數據。在審查你的代碼之後,你的目的是從服務器端重新獲取數據。因此,您需要使用oTable.ajax.reload();重新從服務器獲取數據。

要了解詳情:

阿賈克斯relaod: https://datatables.net/reference/api/ajax.reload()

抽獎: https://datatables.net/reference/api/draw()

+0

所以我必須把'oTable.ajax.reload ()'上面'oTable.draw()'?我已經這樣做了,但我仍然得到了同樣的結果。是因爲我使用數據表1.9所以我不能使用draw()?但是當我試圖使用數據表1.10我有一個錯誤'不能讀取屬性'未定義的數據' – hendraspt

+0

使用'oTable.ajax.reload()'來代替'oTable.draw()' –

+0

大約有2個錯誤這可能會導致'不能讀取未定義的屬性'mData'。 1.您的數據列號與您的表列號不匹配。 2.它不返回與「DataTable」結構相匹配的格式。因此您可以使用Chrome開發者模式來觀察您面臨的問題。 –

相關問題