2011-02-04 21 views
2

データベースに保持されているjsonを使用してjQuery DataTableをフォーマットしようとしています。私は応答の隠されたフィールドでクライアントにjsonを渡します。私は、次のJSでデータテーブルを初期化してみてください。jQueryのデータ型jsonの初期化が無効json

function initDataTables(){ 

     $('.datatable').each(function(i) { 
      // Look for a hidden field containing the json to use when initialising the datatable 
      var hiddenfieldkey = $(this).attr('id') + 'jsoninit' 
      var hiddenfield = $('#' + hiddenfieldkey); 
      if (hiddenfield.length > 0) { 
       // We have found some 'special' json formatting, so use it 
       var jsoninittext = $(hiddenfield).val(); 
       alert(jsoninittext); 
       var json = $.parseJSON(jsoninittext); 
       alert('point two'); 
       $(this).dataTable(json); 

      } 
      else { 
       // Standard datatable formatting 
       $(this).dataTable({ 
        "bJQueryUI": true, 
        "sPaginationType": "full_numbers", 
        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] 
       }); 
      } 
     }); 

     initDataTableButtons(); 

    } 

このすべては、以下のJSONで正常に動作します(私はちょうど私がデシベルでJSONのinitテーブルを埋めるために使用するSQLをコピーした:

update query set jQueryDatatableJSONInit= 
'{ 
"iDisplayLength": 25 
,"bJQueryUI": true 
,"sPaginationType": "full_numbers" 
,"aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] 
,"aoColumnDefs": [ 
     { "bVisible": false, "aTargets": [ 0,3,4 ] } 
     ,{ "sClass": "nowrap", "aTargets": [ 2 ] } 
     ,{ "iDataSort": 0, "aTargets": [ 1 ] } 
     ,{ "bSortable": false, "aTargets": [ 2 ] } 
     ] 
}' 
where id ='336f7ea2-173a-4b8f-af30-e217d1e1c628' 

しかし、問題は私のJSONの機能を備えている場合(前と同じですが、関数を含むfnRenderラインを含む)以下のように、発生します。

update query set jQueryDatatableJSONInit= 
'{ 
"iDisplayLength": 25 
,"bJQueryUI": true 
,"sPaginationType": "full_numbers" 
,"aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] 
,"aoColumnDefs": [ 
     { "fnRender": function (oObj) { return oObj.aData[2] +'' ''+ oObj.aData[3]+'' ''+ oObj.aData[4];},"aTargets": [ 2 ]} 
     ,{ "bVisible": false, "aTargets": [ 0,3,4 ] } 
     ,{ "sClass": "nowrap", "aTargets": [ 2 ] } 
     ,{ "iDataSort": 0, "aTargets": [ 1 ] } 
     ,{ "bSortable": false, "aTargets": [ 2 ] } 
     ] 
}' 
where id ='336f7ea2-173a-4b8f-af30-e217d1e1c628' 

次の行が失敗した(と無効なJSONエラー):

var json = $.parseJSON(jsoninittext); 

ので、第二の警告(ポイント2)が実行されることはありませんので、それはのdataTable()関数に取得していません。関数定義(中括弧を含む)がjsonを無効にしているかのように見えます。 どのように私は、jqueryのdatatablesが期待どおりに関数の定義を含むことができるようにdatatable初期化jsonをフォーマットすることができます知っていますが、それでも有効なJSON(私は使用できるエスケープの並べ替えの並べ替え)ですか? ありがとうございました。

答えて

1

JSONシリアライゼーションは、関数を格納するためのものではありません。 JSONはその性質上、内部プロセスではなくオブジェクト内のデータメンバーをシリアライズする方法です。 JSONを使用してどのオブジェクトがシリアライズを目的としているかを調べるには、「値」の見出しの下にあるhttp://www.json.org/を参照してください(3桁下)。

関数を引用符で囲んで文字列に変換し、そのデータメンバーの評価を実行することはできますが、通常は開発者にeval()を使用するよう勧めません。

+0

情報のおかげで、私は問題を回避しました(下記参照) – DEH

0

最後に、私は避けたいと思うevalなしでこれを動作させることができませんでした。私の回避策は、fnRenderの機能(いくつかの列を1つの列に結合していたところ)をサーバー層にカプセル化して、サーバーが列を結合し、fnRenderを組み合わせる必要がないようにすることでした。恥、しかしそこに行く。

関連する問題