当前位置: 首页 > 知识库问答 >
问题:

数据表-返回列作为超文本标记语言元素

唐渊
2023-03-14

我在将一些客户端数据表逻辑迁移到服务器端时遇到了一些困难。

我当前的问题是,对于Datatables,如果要对一大组数据(20000行)进行分页,我首先需要加载控制器中的所有行,然后将它们传递给视图:

$records = \App\Records::get();

return view("example.datatables")->with(["records" => $records]);

然后,在加载所有内容和Datatables将记录分页为500页之前,需要等待大约2分钟:

$("#table").DataTable({
  paging: true,
  pageLength: 500,
  ...
});

我更改了Datatables声明,以通过ajax处理服务器端处理,如下所示:

$("#table").DataTable({
  processing: true,
  serverSide: true,
  ajax: {
    url: "...",
    type: "GET"
  }, paging: true,
  pageLength: 500,
  ...
});

让它按我所希望的方式工作非常顺利,但问题是Datatables正在覆盖或忽略我从ajax请求返回的内容:

$columnData = [];
foreach($recordsFromDatabase AS $record){
  $columnDataObject = [];

  $columnDataObject[0] = '<td class="myClass" data-property="myProperty"><input type="text" name="customInput[]"/></td>'

  ...

  $columnData[] = $columnDataObject;
}

return response()->json([
  "draw" => (int)$request->input("draw"),
  "recordsTotal" => $totalRecords,
  "recordsFiltered" => $totalFilteredRecords,
  "data" => $columnData,
  "error" => null
]);

基本上,我发回的是一个包含datajson响应,这是一个列数组,它们是

数据表给人一种错觉,认为这是正确的工作,但我最终

<tr role="row" class="even">
  <td class="sorting_1"><input type="text" name="customInput[]"/></td>
  ...
</tr>
<tr role="row" class="odd">
  <td class="sorting_1"><input type="text" name="customInput[]"/></td>
  ...
</tr>

它呈现

是否有某种方法可以告诉Datatables我返回的内容是有效的


共有2个答案

袁宜
2023-03-14

因此,我仍然通过响应发送HTML,并使用datatable的createdRow回调,我能够将HTML解析为本地DOM元素,检查它们的类和属性,并根据需要将它们分配给行/列:

createdRow: function(row, data, rowIndex) {
  $.each($("td", row), function (colIndex) {
    var elementFromData = $.parseHTML(data[colIndex]);
    var element = elementFromData[0];

    var elementClass = $(element).attr("class");
    if(typeof elementClass !== undefined){
      $(this).addClass(elementClass);
    }

    var attributes = [
      {
        label: "data-id",
        value: $(element).attr("data-id")
      }, ...
    ];

    for(var i = 0; i < attributes.length; i++){
      var attribute = attributes[i];

      if(typeof attribute.value !== undefined){
        $(this).attr(attribute.label, attribute.value);
      }
    }
  });
}, ...

这可能不是最漂亮的解决方案,我知道从我的AJAX请求返回超文本标记语言是低效的,但是由于时间限制,这是我能想到的最好的解决方案

江睿
2023-03-14

您错误地使用了jQuery数据表。

您不应该发送

例如:

$('#example').DataTable( {
  "columnDefs": [ {
    "targets": 3,
    "createdCell": function (td, cellData, rowData, row, col) {
      $(td)
        .attr('data-property', rowData['myCustomProperty'])
        .addClass(rowData['myClass']);
    }
  } ]
} );

对于Laravel,使用优秀的Laravel数据表包在服务器端处理模式下正确显示表。

 类似资料:
  • 我在输入上使用typeahead发送建议。。一切都很好,但我知道我想动态创建HTML表并在表中赋值,所以在我的java脚本中,我声明HTML变量来存储表,然后在返回值时使用这个变量。当我将html保存在变量中时,问题就出现了,它开始给出错误,即变量未定义,当我将它放在引号中时,返回时,它只显示变量。。我不知道该怎么做,也不知道应该使用哪种方法,但我被困在了这一点上,我的HTML正在工作 这里是我的

  • 我在stackoverflow上看了其他一些答案,但没有找到一个回答我问题的答案。 我有一个变量工具快捷方式,它是由对象数组组成的对象: 我试图为对象中的每个元素(上面对象中的3个元素)返回一些HTML。因为我使用的是带有return语句的for循环,所以只显示每个数组的前几个元素(3个元素中的2个)。如何显示所有三个元素?

  • 我有一点HTML应该调用/nodes/calibleph?值=浮点数: 编辑:这家伙似乎也有同样的问题

  • 我试图通过泽西客户端的Web服务获取一个对象,通过发送预注册ID作为路径变量的服务,在高级REST客户端和邮递员上测试它-它的工作原理,但当我通过泽西客户端从java代码使用Web服务时,我得到超文本标记语言返回而不是JSON。 这是密码 Web服务- 泽西客户- 通过邮递员和ARC消费web服务后- 如上图所示,通过jersey客户端使用web服务后,我得到的是HTML内容,而不是JSON- 然

  • 我是PHP新手,不知道自己做错了什么。我可以打开html表单并提供数据,但当我点击submit时,它会显示php代码,并且数据库(显然)没有更新。我已经尝试过通过phpMyAdmin手动将值插入表中,并且效果很好。我在网上看过,但我的语法看起来不错。我做错什么了吗?如果错误不太明显,是否有有效的调试方法(即查看错误)? 我有超文本标记语言代码 这是PHP代码 这张表位于phpMyAdmin的数据库

  • 我正在使用ITextRenderer从html生成PDF。然而,我得到以下异常: 你能帮帮我吗? 任何帮助都将不胜感激。 先谢谢你。