【问题标题】:Why does this DataTables Ajax call not work properly?为什么这个 DataTables Ajax 调用不能正常工作?
【发布时间】:2012-08-21 17:16:27
【问题描述】:

我正在尝试让 dataTables 插件处理网站的信息。我已经阅读了用于数据表的documentationvarious support 线程以及various StackOverflow questions,但在分辨率方面无济于事。根据上述文档,我拥有的代码应该可以正常工作......它没有。

Javascript:

$(document).ready( function(){
 $('#results_table').dataTable( {
  'bServerSide': true,
  'sAjaxSource': 'results.php',
  'fnServerParams': function ( aoData ) {
    aoData.push( { 't': Math.random() }); 
    }
   });
});

HTML 代码:

<div id='results'>
  <table id='results_table' >
   <thead>
    <tr>
    <th>Num</th>
    <th>Type</th>
    <th>Access date</th>
    <th>Access name</th>
   </tr>
  </thead>
 <tbody>
</div>

PHP sn-p(检索/格式化 SQL 数据后:

$output = array('sEcho'=>1,'iTotalRecords'=>$count, 'iTotalDisplayRecords'=>$count, 'aaData'=> $results);
echo json_encode($output);

返回的数据(测试总数的一小部分):

{"sEcho":1,"iTotalRecords":3,"iTotalDisplayRecords":3,"aaData":[["1707052901-1A","D","Aug 17, 2012 1:54 PM","aqr"],["1707052901-1A","C","Aug 17, 2012 1:53 PM","aqr"],["2835602-4A","D","Aug 15, 2012 7:39 AM","aqr"]]}

现在,当我加载带有数据表的页面时,我收到了一个关于 -

非常有用的答案

未捕获的类型错误:无法读取未定义 jquery.dataTables.min.js:49 的属性“长度”

并且该表没有填充信息。

问题:我做错了什么;为什么我对数据表的服务器端处理的实现不起作用?如何解决此问题才能正常显示?

【问题讨论】:

  • 自 1.9 发布以来,我只使用过一次数据表。 fnServerParams 在我看来不合适。我刚刚回顾了我的脚本,它们都使用:'fnServerData'。此外,如果没有将“fnCallback”作为参数传递给函数,表格将不会从内存中提取。另外,您是否每次都将 'sEcho = 1' 传递回页面?
  • @DavidBarker 目前,由于第一次加载时没有$_GET['sEcho'] 变量,我在每个页面加载时都传递sEcho=1。文档说必须返回/提供这个值。 The next most common reason for server-side processing not working is the sEcho variable not being returned as it was set in the request. DataTables uses sEcho to keep a draw count, so this is an important parameter
  • 确实 :) 很高兴你得到了这个排序。我提到 sEcho 的原因是它必须在收到时传回,而不是总是 1,否则你的重绘将永远无法工作:P
  • @DavidBarker :好的,感谢您提供的信息。现在还有另一个问题,该死的数据表甚至没有在加载时进行初始绘制。从这些家伙那里要求一个不令人沮丧的该死的例子是不是太过分了??
  • 哈,当我开始使用 Datatables 时,它确实非常令人沮丧。该文档虽然资源丰富,但对于初次使用的用户并不是很有帮助。尤其是当您使用服务器端处理时。如果它有帮助,如果你想加入聊天,我有时间,可以与你分享我的工作脚本。

标签: php jquery datatables


【解决方案1】:
aoData.push( { 't': Math.random() }); 

应该这样使用:

aoData.push( { 'name': 't', 'value':Math.random() }); 

不确定这是否是问题,但这解决了我在使用数据表时的一些问题

【讨论】:

  • 谢谢;这一调整让我的数据出现了!现在,我还有其他一些布局和数据大小问题需要解决!
  • 如果您需要更多帮助,请发布一个新问题 :)
  • 嗨,我来自未来。这也为我做了。
猜你喜欢
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多