2011-02-04 5 views
2

데이터베이스에 보유 된 json을 사용하여 jQuery DataTable을 포맷하려고합니다. 나는 응답에 숨겨진 필드에서 클라이언트에게 json을 전달합니다. 나는 다음 JS으로 데이터 테이블을 초기화하는 시도 :jQuery datatables 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과 잘 작동 (난 그냥이 DB에서 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); 

그래서 두 번째 경고 (점 두 사람은) 결코 실행, 그래서 그것은 데이터 테이블() 함수에 도착하지 않습니다. 마치 함수 정의 (중괄호 포함)가 json을 유효하지 않게 만드는 것처럼 보입니다. 아무도 내가 jatable datatables에 의해 예상대로 함수 정의를 포함 할 수 있도록 datatable 초기화 json을 포맷 할 수있는 방법을 알고 있지만 그 여전히 유효한 json (내가 사용할 수있는 일종의 정렬 이스케이프) 것입니다? 대단히 감사합니다.

답변

1

JSON 직렬화는 함수를 저장하기위한 것이 아닙니다. JSON은 본질적으로 내부 프로세스가 아닌 객체 내의 데이터 멤버를 직렬화하는 방법입니다. JSON을 사용하여 어떤 객체가 직렬화를 위해 사용되는지 확인하려면 "값"표제 아래에있는 http://www.json.org/을 참조하십시오 (아래 그림 세 개).

함수를 문자열에 넣고 해당 데이터 멤버에 대한 평가를 실행하려면 따옴표로 묶을 수 있지만 일반적으로 개발자가 eval()을 사용하도록 권장하는 것은 아닙니다.

+0

정보를 주셔서 감사합니다. 문제를 해결했습니다 (아래 참조). – DEH

0

결국 나는 이것을 피하기 위해 eval 없이는 작동하지 않을 수 있습니다. 제 해결 방법은 서버 계층에 fnRender 기능 (여러 열을 하나의 열로 결합)을 캡슐화하여 서버가 열을 결합하므로 fnRender를 사용하여 이들을 결합 할 필요가 없었습니다. 부끄러움,하지만 거기에 간다.