【问题标题】:Posting jquery datatable data to server in JSON format以 JSON 格式将 jquery 数据表数据发布到服务器
【发布时间】:2016-08-08 12:12:19
【问题描述】:

我知道这个问题已经在 SO 和数据表网站上被问过很多次,但我无法使用提供的解决方案让它工作。

我正在客户端构建我的数据表,现在想以 json 格式将客户端数据发布到我的 wep api 控制器。

客户端在添加/删除行时工作正常。 但是当我尝试使用以下方法创建我的 JSON 时:

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

我得到以下结果:

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

所以基本上我的 JSON 对象中缺少列名,因此 web api 无法将其拾取并将其转换为:

List<ReceiptEntryViewModel> ReceiptDetails

那么我怎样才能让数据表生成以下格式的 JSON:

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

【问题讨论】:

    标签: jquery json datatables


    【解决方案1】:

    如果你只是想收集列名并将它们用作 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)
    })  
    

    现在您有一个有效的 JSON,您可以stringify 并发送到服务器。

    小样演示 -> 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() )
    

    将返回一个可以传递给服务器脚本的有效 JSON 字符串。

    演示 -> http://jsfiddle.net/d07f6uvf/

    【讨论】:

    • 嗨大卫,谢谢你的回答,看起来它可以工作,在我的情况下,我将处理最多 100 行,因此不认为会对性能产生影响。但是,我认为有一个内置的数据表函数(它已经处理了循环)可以生成我的 wep api 可以接受的格式正确的 JSON
    • @JustLearning,不幸的是,没有神奇的 API 函数可以将您的字符串数组转换为 JSON。但是,如果您为数据表指定columns 部分自己将数据插入为JSON - 那么table.rows().data() 的输出将是有效的JSON。见例子 -> jsfiddle.net/ev7yz07L 所以你可以说,如果你第一次做对了,你就不需要上面的扭曲了:)
    • 太好了,实际上您评论中的解决方案正是我想要的。请添加到答案!谢谢
    • @JustLearning,更新了一个新示例。感谢您接受答案。
    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多