2017-03-14 9 views
1

の内容に従って、says on the tinに従って選択されたままではありません。Datatablesは、「データのリロードで行選択を保持できる」必要があります。しかし、私はそれをajaxからのデータを使用するときに動作させることはできません。 Datatables.js選択された行は、ajax.reload()

setInterval(function() { 
    oTable.ajax.reload(); 
} 

しかし、任意の選択された行:私が最初に表5秒ごとにリフレッシュするために、これを使用し、上記参照の指示に従い

oTable = $('#fileList').DataTable({ 
    select: true, 
    "ajax": { 
     "url": "./data.php", 
     "type": "GET" 
    }, 
    rowId: 'Index', 
    "createdRow": function (row, data, dataIndex) { 
     $(row).addClass(data[2]); //set formatting from data[2] 
    } 
    }); 

:ここ

は、私は私のテーブルを作る方法です5秒ごとに選択を解除します。だから、私はより明確である試み:配列に選択された行をロードしたsetInterval関数内にそれらを再選択する:コンソールの

setInterval(function() { 
    var selectedRows = []; 
    //put all the selected rows into an array: 
    sel = oTable.rows('.selected').every(function (rowIdx) { 
     selectedRows.push(rowIdx); 
    }); 
    oTable.ajax.reload(); 
    console.log(selectedRows); 
    //select all the rows from the array 
    for (var i = 0; i < selectedRows.length; i++) { 
     console.log("selecting ",selectedRows[i]); 
     oTable.rows(selectedRows[i]).select(); 
    } 
    }, 5000) 
}); 

を私は(この例では第三の行)選択された行を持っている場合、私は

Array [ 2 ] 
selecting 2  

期待どおりですが、行は再選択されません。コンソールにoTable.rows(2).select();と入力すると、3行目が選択されますが、setIntervalブロックからは機能しません。

私は、rowIDプロパティと何か関係があると推測しています。私はこのようなHTMLでテーブルを定義した:

 <table id="fileList" class="display"> 
     <thead> 
      <tr> 
      <th>Index</th> 
      <th>Status</th> 
      <th>Owner</th> 
      </tr> 
     </thead> 
     </table> 

とデータが最初の項目はインデックスであり

{"data":[["1", "foo", "bar"], ["2", "fuz", "baz"]} 

のような配列を返すPHPスクリプトから来ています。

答えて

1

返されるデータにキーがないために問題が発生しているようです。あなたは次のように連想配列としてデータを返すみました:

"data": [ 
    { 
     "index": 1, 
     "status": "Foo", 
     "owner": "Bar" 
    } 
] 

あなたはその後、交換してくださいすることができます

rowId: 'Index', 

で:そのため

rowId: 'index', 
+0

感謝。連想配列を使用するには、Datatableオブジェクトの作成時に列を指定する必要があるように見えることに注意してください。サーバー側の連想配列に変更しても、数値索引でデータにアクセスしようとすると、データが破損しました。 – stib

関連する問題