Posting jquery datatable data to server in JSON format -
i know question has been asked numerous times on , on datatables site, cannot work using solutions provided.
i building datatable on client side , want post client data wep api controller in json format.
the client side working correctly when comes adding/deleting rows. when try create json using:
var table = $('#detailtable').datatable(); var details = json.stringify(table.rows().data().toarray()); i getting following result:
[["11046","abc","bis","123","123",15129]] so missing column names in json object, web api failing pick , convert to:
list<receiptentryviewmodel> receiptdetails so how can datatables generate json in following format:
[["itemid":"11046","itemcode":"abc","itemname":"bis","price":"123","quantity":"123","total":15129]]
if want collect column names , use them property names in json, can build array of column names way :
var fieldnames = [], json = [] table.settings().columns()[0].foreach(function(index) { fieldnames.push($(table.column(index).header()).text()) }) i using text() filter out html. above iterate on each row instead, , construct object literal (json item) each row using collected fieldnames :
table.rows().data().toarray().foreach(function(row) { var item = {} row.foreach(function(content, index) { item[fieldnames[index]] = content }) json.push(item) }) now have valid json can stringify , send server.
small sample demo -> http://jsfiddle.net/5j9wgorj/
note example. if have larger datasets should avoid foreach , use for-loops instead. there should no need blindly rebuilding array of header names since you, developer, know both column names , want properties named beforehand.
update solution ended be. contortions building json can avoided if datatable prepared using json. define columns section :
var table = $('#example').datatable({ columns : [ { data : 'myfield' } ] }) and insert new rows json / literals :
table.row.add({ myfield: 'some value' }).draw() now
json.stringify( table.rows().data().toarray() ) will return valid json string can passed serverscript.
demo -> http://jsfiddle.net/d07f6uvf/
Comments
Post a Comment