2012-03-07 10 views
2

空のdataTableを初期化していたページがあり、selectからjqueryを変更した後に$ .getJSON()でjsonデータを取得しました。 .fnAddData.Likeこれでテーブル:jQueryのデータ型ページをサーバー側の処理に変更した後で壊れた

oTableDisk = $('#disk_connection_table').dataTable({ 
     "bJQueryUI": true, 
     "iDisplayLength": 30, 
     "oLanguage": { 
      "sLengthMenu": tableLength 
     }, 
     "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull){ 
      $(nRow).attr('id', aData[0] + "|<?php echo $this->hostInfo['name']; ?>|<?php echo $this->hostInfo['id']; ?>"); 
      return nRow; 
     }, 
     "aoColumns": [{"bSearchable": false, "bVisible": false}, null, null, null, null, null, null] 
    }); 

$('#disk_switch').change(function(){ 
     $.getJSON('/host/getavailableports?type=disk&switch=' + $('#disk_switch option:selected').val(), function(data){ 
      if(data[0]){ 
       data.reverse(); 
       oTableDisk.fnClearTable(); 
       $.each(data, function(index){ 
       //console.log(data[index]); 
        oTableDisk.fnAddData([data[index]['Item1'], 
             data[index]['Item2'], 
             data[index]['Item3'], 
             data[index]['Item4'], 
             data[index]['Item5'], 
             data[index]['Item6'], 
             data[index]['Item8']]); 

       }); 
       enableEditable(oTableDisk); 
      } 
     }); 
    }); 

これは、我々は情報の500の以上の行を処理するのに必要になるまで細かい仕事をしていたとのエラー「スクリプトが応答しなくなってきた」とIEを壊しました。

は今、私はすべての空のdataTableを初期化しますが、1を作成していないよと、このような選択メニューの変更:

$('#disk_switch').change(function(){ 
     oTableDisk = $('#disk_connection_table').dataTable({ 
      "bJQueryUI": true, 
      "iDisplayLength": 30, 
      "bProcessing": true, 
      "bServerSide": true, 
      "bDestroy": true, 
      "sAjaxSource": '/host/getavailableports?type=disk&switch=' + $('#disk_switch option:selected').val(), 
      "aaSorting": [[0, "asc"]], 
      "oLanguage": { 
       "sLengthMenu": tableLength 
      }, 
      "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull){ 
       $(nRow).attr('id', aData[0] + "|<?php echo $this->hostInfo['name']; ?>|<?php echo $this->hostInfo['id']; ?>"); 
       return nRow; 
      }, 
      "aoColumns": [{"bSearchable": false, "bVisible": false}, null, null, null, null, null, null], 

      "fnDrawCallback": function() { 
       $(oTableDisk.fnGetNodes()).click(function() { 
        enableEditable(oTableDisk); 
       }); 
      } 

     }); 

制限、およびORDERBYを使用してクエリをサポートするためのコントローラとモデルを書き換えた後、引数私はデータを取得しているし、私のJSONオブジェクトが正しくフォーマットされているようです。問題は、今ではページ機能を持たないということです。または並べ替えの機能。表には、ページ分割の矢印がグレー表示されていることが示されています。列見出しをクリックしても実際には何も行われません。ページネーションリンクの上には、「クエリの正しい30エントリ(フィルタリングされた合計エントリ数483)の1から30を表示しています」と表示されます。

これは、ページが読み込まれた後にテーブルを読み込むことと関係がありますが、修正方法はわかりません。

+0

ブラウザのコンソールを使用して戻り値を分析します。開始点が必要です。有効なjsonの場合、毎回同じデータを送信するサーバーのように聞こえます。 – charlietfl

+0

これは、サイド処理。データの後にoTableDisk.fnAddData関数に "false"フラグを追加して修正しました。データが読み込まれた後でoTableDisk.fnDraw関数を呼び出します。もう1つの方法は、すべてのデータがロードされた後にテーブルを再描画することでした。 –

答えて

2

だけで必要なサーバー側のパラメータの正しい値をバック送信していないサーバーに:私はそれがここにあるeleventyドルであることが喜ん

http://datatables.net/usage/server-side

は:

iTotalRecordsがありますレコードの絶対総数おそらくここで正しい値を設定します。

iTotalDisplayRecords - サーバー側の後のレコードの合計数はです。です。これは単純に返送されるレコードの数ではありません。 1億ドルのベットは、あなたの新しいコントローラでここに30を入れていることです。

この2番目の目的がまだわからない場合は、検索や他のフィルタを使用してクエリを減らすオプションがあることに注意してください。だから、私は500レコードがあり、そのうち250レコードに "Foobar"という文字列があるとしましょう。 「Foobar」を検索してサーバーがこのフィルターを正しく処理している場合は、利用可能なレコードを250に絞り込む必要があります。サーバー側では、実際にはiDisplayStartiDisplayLengthで要求されたレコードのみが返送されますDT)。あなたのケースでは、サーバは既に正しく送信しているように聞こえる30のレコードを送り返します。

+0

いいえ、私は正しいことを持っていました。私はそれがDOMの後にロードされているテーブルと関係していたと思います。 –

+0

私はあなたがデータセットを500回リロードしていた部分を見逃していました。 ;-)私はスマートにすべきだった - 500レコードは、クライアント側のDataTablesの実装を壊したり、著しく遅くすることはなかった。 –

+0

一方、「30」はiTotalDisplayRecordsから直接来ています...だから何か不思議なことが起こっていました。しかし、あなたが最後にサーバー側を必要としなかったなら、幽霊を狩る理由はないと思います! –