2011-02-04 75 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初始化表的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); 

因此第二警報(點二)從來沒有運行,因此它不會到DataTable()函數。它看起來好像函數定義(包含大括號)導致json無效。 有誰知道我怎麼能格式化數據表初始化JSON,以便它可以繼續包含一個函數定義的jQuery數據表如預期,但仍然是有效的JSON(有某種形式的逃避,我可以使用)? 非常感謝。

回答

1

JSON序列化不適用於存儲函數。就其本質而言,JSON是序列化對象內數據成員的一種方式,而不是其內部進程。請參閱「值」標題下的http://www.json.org/(下圖三個數字),以查看使用JSON序列化的對象。

您可以用引號引起來,以迫使它進入一個字符串和運行數據成員一個eval函數,但我不是一個通常以鼓勵開發者使用的eval()。

+0

非常感謝信息,我圍繞這個問題編碼(見下文) – DEH 2011-02-09 09:46:12

0

最後我無法得到這個工作沒有eval,我想避免。我的解決方法是封裝fnRender功能(我在那裏幾列合併爲一列)到服務器層,從而使服務器合併列,因此沒有必要使用fnRender把它們結合起來。慚愧,但你去了。