2017-06-12 3 views
1

私はDatatableを使用して5つのタブを持つテーブルを表示しています。しばらくの間デバッグした後、私はデータベースへの各呼び出しが2回行われていることに気づいた。最初の呼び出しは空のJSONを返し、2番目の呼び出しは適切なデータを返します。これにより、最初のコールが終了する前にコールの第2グループが終了したときに、テーブルにデータが入力されなくなります。2回ランダムに呼び出されたデータテーブルは空のテーブルになります

これは私が使用しているコードです:ここでは

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
    $.fn.dataTable.tables({visible: true, api: true}).columns.adjust(); 
}); 
    var table = $('table.table').DataTable({ 
     "processing": true, 
     "serverSide": true,  
     "ajax": { 
      "dataSrc": "Data", 
      "url": "my_controller/getDataTable", 
      "data": { string: $("input.form-control").val() },// gets the value from the hidden search field and check the db with this string (i.e "job2") 
      "type": "POST" 
     }, 
     "columns": [ 
      { "data": "name" }, 
      { "data": "eff" }, 
      { "data": "sal" }, 
      { "data": "id",  // The data to use in the link 
       "render": function(data,type,row,meta) { 
       var a = "<a href='some_url'><button>hire</button>"; 
       return a; 
       } 
      } 
     ] 
     }); 
     // Apply a search to the other tables to filter the list automatically 
     $('#myTable1').DataTable().search('job1').draw(); 
     $('#myTable2').DataTable().search('job2').draw(); 
     $('#myTable3').DataTable().search('job3').draw(); 
     $('#myTable4').DataTable().search('job4').draw(); 
     $('#myTable5').DataTable().search('job5').draw(); 

はFirebugののスナップショットです: enter image description here

私が問題を引き起こしている私のコードのどの部分を理解していません。私が最後に.drawを削除した場合、唯一の空の応答があります

...

+0

更新。検索( 'job1').draw(); ' – Kramb

答えて

1

あなたは.DataTable()のあなたの最初の使用ですべてのテーブルをインスタンス化している、とあなたは.DataTable().search('job1').draw();

を使用するときに、あなたは再びそれをやって

column().search()を使用すると、テーブル内の単一の列をフィルタできます。 Source

$('#myTable1').columns(ColumnIndex).search('job1').draw(); 

あなたは.DataTable() ``のあなたの最初の使用ですべてのテーブルをインスタンス化し、そしてあなたが.DataTable() `を使用する場合、あなたは再びそれをやって

var table1 = initializeTable($("#myTable1")); 
var table2 = initializeTable($("#myTable2")); 

function initializeTable(tbl){ 
    return tbl.DataTable({ 
     ...setup table... 
    }); 
} 

table1.columns(ColumnIndex).search('job1').draw(); 
table2.columns(ColumnIndex).search('job2').draw(); 
+0

私は' $( '#myTable1')。column(1).search( 'job1')。draw(); 'を試しましたが、' $(...) .columnは関数ではありません。代わりに 'columns'を使用した場合と同じです。 – remyremy

+0

さて、各テーブルを変数として設定する必要があります。私は例を挙げます。 – Kramb

+0

コードは、各テーブルのすべてのジョブを返します(フィルタされていないように見えます)。テーブルを 'var table1 = initializeTable($("#myTable1 ")、 'job1');で初期化し、' 'data ':{string:staff_type}' 'に新しい変数' staff_type'を渡す必要がありました。 initializeTable(tbl、staff_type){'。テーブルは依然として2回呼び出されますが、それぞれがデータを返します。おそらく改善の余地があってもうまく動作します。ありがとう! – remyremy

関連する問題