2016-08-08 3 views
1

나는이 질문이 SO와 datatables 사이트에서 여러 번 요청되었지만 제공된 솔루션을 사용하여 작동시키지 못한다는 것을 알고 있습니다.JSON 형식으로 jquery datatable 데이터를 서버에 게시

클라이언트 측에서 데이터 테이블을 구축 중이며 클라이언트 데이터를 JSON 형식의 wep api 컨트롤러에 게시하려고합니다.

행을 추가/삭제할 때 클라이언트 측에서 올바르게 작동합니다. 하지만 난 사용하여 내 JSON을 만들려고 할 때 :

var table = $('#detailTable').DataTable(); 
var details = JSON.stringify(table.rows().data().toArray()); 

을 나는 다음과 같은 결과를 얻고 그래서

[["11046","ABC","bis","123","123",15129]] 

기본적으로 내가 이렇게 웹 API가 실패, 내 JSON 객체에서 열 이름을 놓치고를 그것을 선택하고로 변환 :

그래서 나는 다음과 같은 형식의 JSON 생성하는 datatables을 얻을 수있는 방법
List<ReceiptEntryViewModel> ReceiptDetails 

:

를 691,363,210
[["ItemId":"11046","ItemCode":"ABC","ItemName":"bis","Price":"123","Quantity":"123","Total":15129]] 

답변

2

그냥 열 이름을 수집하고 JSON에서 속성 이름으로 그들을 사용하려면, 당신은 열 이름의 배열이 방식으로 구축 할 수 있습니다 :

var fieldNames = [], json = [] 
table.settings().columns()[0].forEach(function(index) { 
    fieldNames.push($(table.column(index).header()).text()) 
}) 

I 필터링 text()을 사용하고를 어떤 HTML든지. 그리고 위와 같이 할 대신 각 행을 반복하고, 수집 된 fieldNames를 사용하여 각 행에 대한 객체 리터럴 (JSON 항목) 구성 :

table.rows().data().toArray().forEach(function(row) { 
    var item = {} 
    row.forEach(function(content, index) { 
    item[fieldNames[index]] = content 
    }) 
    json.push(item) 
}) 

지금 당신은 당신이 stringify을 할 수 있고 서버에 보내 유효한 JSON이있다.

작은 샘플 데모 -이 그냥 예입니다>http://jsfiddle.net/5j9wgorj/

참고. 더 큰 데이터 세트를 가지고 있다면 forEach을 피해야하고 대신 for -loops를 사용해야합니다. 또한 개발자가 열 이름과 미리 속성의 이름을 지정하기 때문에 헤더 이름 배열을 맹목적으로 다시 작성할 필요가 없습니다.


해결책으로 업데이트되었습니다. dataTable 자체에서 JSON을 사용할 준비가되어 있으면 JSON을 구축하는 데 따르는 어려움을 피할 수 있습니다.

var table = $('#example').DataTable({ 
    columns : [ 
    { data : 'myField' } 
    ] 
}) 

을 그리고 JSON/리터럴로 새 행을 삽입합니다하십시오 columns 섹션을 정의

table.row.add({ myField: 'some value' }).draw() 

지금

JSON.stringify(table.rows().data().toArray()) 

가 serverscript에 전달 될 수있는 유효한 JSON 문자열을 반환합니다.

데모 - 그것은 작동 할 수처럼>http://jsfiddle.net/d07f6uvf/

+0

안녕하세요 데이비드, 답변 주셔서 감사합니다, 그것은보고, 내 경우에는 내가 최대 100 개 행을 처리 할 것입니다, 따라서 영향이있을 것 같아요 성능에. 그러나, 내 wep api 받아 들일 수있는 올바른 형식의 JSON을 생성 할 수있는 inbuilt datatables 함수 (이미 돌봐) 생각했다 – JustLearning

+0

@ JustLearning, 안타깝게도 귀하의 문자열 배열을 JSON으로 변환하는 마법 API 함수가 없습니다. . 그러나, ** 당신이 dataTable **에 대해'columns' 섹션을 지정하고 ** JSON으로 데이터를 삽입한다면,'table.rows(). data()'의 출력은 유효한 JSON이 될 것입니다. 예를 들어보십시오 -> ** http : //jsfiddle.net/ev7yz07L/** 처음으로 올바르게하면 위의 왜곡이 필요 없다고 말할 수 있습니다. – davidkonrad

+0

의견은 내가 찾고있는 것입니다. 답변을 추가하십시오! – JustLearning

관련 문제