2016-08-08 18 views
1

この質問は、SOおよびdatatablesサイトで何度も尋ねられていますが、提供されているソリューションを使用して動作するようにはできません。JSON形式のjqueryデータテーブルデータをサーバーに投稿する

私はクライアント側でデータテーブルを構築していますが、クライアントデータをJSON形式のwep APIコントローラに送信したいと考えています。

クライアント側では、行の追加/削除に関して正しく動作しています。 しかし、私が使用して私のJSONを作成しようとすると:そう基本的に私は、このように、ウェブAPIはに失敗している、私のJSONオブジェクト内の列名をしないのです

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

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

私は、次の結果を取得していますそれをピックアップし、それを変換します

List<ReceiptEntryViewModel> ReceiptDetails 

だから、どのように私は、DataTableのは、次の形式でJSONを生成するために得ることができます。

[["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()) 
}) 

私はフィルタリングする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を構築することで回避できます。 columnsセクション定義:

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

をとJSON /リテラル​​として新しい行を挿入:今すぐ

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

関連する問題