【问题标题】:Trying to insert JSON data into a datatable widget尝试将 JSON 数据插入数据表小部件
【发布时间】:2012-11-06 19:40:20
【问题描述】:

我有一个 Java Web 项目,其中有一个 GET 端点,我正在点击该端点来检索 JSON 数据。 Firebug 显示我正在获取表单中的 JSON 数据

[{"id":7,"serial":"7bc530","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null},
{"id":8,"serial":"4a18d27","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null},
{"id":9,"serial":"f30ef","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null},
{"id":10,"serial":"9e6d","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null},
{"id":11,"serial":"4d8665a3","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null},
{"id":12,"serial":"4fe1457","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}]

在 HTML 方面我有这个,

<table id="table_id">
   <thead>
      <tr>
      <th>id</th>
      <th>serial</th>
      <th>randomDouble</th>
      <th>randomDouble2</th>
      <th>randomDouble3</th>
      <th>date</th>
      <th>removed</th>
      </tr>
</thead>
 <tbody>
</tbody>
</table>

这是我在 javascript 方面的内容,我在这里找到了其他人的另一篇文章,该格式适用于他们。

$(document).ready(function() {

    var Table = $("#table_id").dataTable({
       "bFilter":false,
       "bPaginate":false,
       "bProcessing": true,
       "bServerSide":true,
       "bInfo":false,
       "sAjaxSource": ApiUrl(),
       "fnServerData": function (sSource, aoData, fnCallback){
           $.ajax({
            "dataType": 'json',
               "type": "GET",
               "url": sSource,
               "data": aoData,
               "success": fnCallback
           }); 
       }
    });

该表正在显示列,但未提取数据。正如我所说,我确实验证了 JSON 数据是通过 Firebug 发送到网页的——通过它发出的 GET 请求。

我发现数据表非常混乱,我无法让这个 JSON 实际填充...

任何帮助将不胜感激。

编辑:

我试过了,

var Table = $("#table_id").dataTable({
       "bFilter":false,
       "bPaginate":false,
       "bProcessing": true,
       "bServerSide":true,
       "bInfo":false,
       "sAjaxSource": ApiUrl(),
       "sAjaxDataProp": ""
    });

【问题讨论】:

  • 您可以使用“sAjaxSource”:将其指向一些将发送 json 数据的 servlet/php...
  • 问题在于 DataTables 需要一个对象,该对象的数据源包含一个名为“aaData”的数组。我无法修改传入的 JSON。
  • 不如寻找一种方法来包装并将其设置为 aaData 并将其作为“文本文件”源传递给 datables 构造函数

标签: javascript jquery ajax json datatables


【解决方案1】:

这应该适用于服务器端:

 var Table = $("#table_id").dataTable({
   "bFilter":false,
   "bPaginate":false,
   "bProcessing": true,
   "bServerSide":true,
   "bInfo":false,
    "aoColumns": [
    { "mData": "id" },
    { "mData": "serial" },
    { "mData": "randomDouble" },
    { "mData": "randomDouble2" },
    { "mData": "randomDouble3" },
    { "mData": "date" },
    { "mData": "removed" }

    ],
   "sAjaxSource": "url",
   "fnServerData": function ( sSource, aoData, fnCallback ) {
    $.getJSON( sSource, aoData, function (json) { 
        map = {}
        map["aaData"] = json
        fnCallback(map)
    } );
}
});

关于最后评论的更新:

"fnServerData": function ( sSource, aoData, fnCallback ) {
  $.getJSON( sSource, aoData, function (json) { 
        $.getJSON('second_json_url', function(secondjson) {
            $.each(secondjson, function(index, object) {
              json[index].serial = secondjson[index].name
            })
            map = {}
            map["aaData"] = json
            fnCallback(map)
        })
  });
}

【讨论】:

  • 我可能会走这条路。我想做一些事情,我想我可以通过你的实现来做到这一点。我传回的 json(我上面有的)包括元素“序列”。我有另一个数组,其元素名称为“serial”,并且该数组具有元素“名称”。我需要弄清楚如何从另一个数组中引入“名称”并将其替换为序列在这个数组中的位置。想法?
  • 您的意思是要加载第一个 json 并将串行列中的值替换为新 json 中的值?
  • 是的,如果可能的话,这正是我想做的。
【解决方案2】:

您可以从任意数据源进行读取。查看下面的文档(找到here)。这适用于服务器端处理和 ajax 数据源。

另外,可以将 sAjaxDataProp 设置为空 字符串,这导致 DataTables 将给定的数据源视为 表数据数组(而不是作为对象的属性)。

【讨论】:

  • 我刚试过,它没有填充数据。 Firebug 控制台在 Jquery.dataTables.js 中有一个“TypeError: aData is undefined” =/
  • 除非您实现服务器端协议datatables.net/usage/server-side,否则您将无法使用bServerSide。您是否尝试实现分页/排序/过滤?
  • 我不是。我删除了 bServerSide 并且该错误消失了。不幸的是,我得到了一个新的。弹出一个窗口并显示“DataTables 警告(表 id = 'table_id'):从第 0 行的数据源请求未知参数 '0'”
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多