从php返回的json无法解析为jQuery dataTables

时间:2016-01-11 21:27:45

标签: javascript php jquery mysql datatables

我有一个带库书的简单mysql数据库表。我正在使用php页面来检索书籍列表。这就是它的回报:

php get_books.php

{"iTotalRecords":"1","aaData":[{"author":"Tim Powers","title":"The Anubis Gates","genre":"Fiction","publisher":null,"year":null,"location":"Bookshelf","notes":null}]}

在jQuery dataTables中,我有:

<script >
    $(document).ready(function() {
    $('#books').DataTable({
        "bServerSide": true,
        "sAjaxSource": "./get_books.php"
    });
});
</script>

当我使用该脚本运行网页时,我收到提醒:

DataTables警告(表ID =&#39;书籍&#39;):DataTables警告:无法解析来自服务器的JSON数据。这是由JSON格式错误引起的。

我无法找到格式化错误。应该如何格式化数据。

这是返回JSON数据的php页面:

<?php
    $page = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10;
    $offset = ($page-1)*$rows;
    $result = array();

    include 'conn.php';

    $rs = mysql_query("select count(*) from books");
    $row = mysql_fetch_row($rs);
    $result["iTotalRecords"] = $row[0];
    $rs = mysql_query("select * from books limit $offset,$rows");

    $items = array();
    while($row = mysql_fetch_object($rs)){
        array_push($items, $row);
    }
    $result["aaData"] = $items;

    echo json_encode($result);

?>

回报应该是什么样的,我该如何制作呢?

2 个答案:

答案 0 :(得分:0)

您的JS和PHP代码都存在许多问题。

如果books表中的记录少于几千,我建议删除"bServerSide": true以启用客户端处理模式来禁用服务器端处理模式。

<强>的JavaScript

$(document).ready(function() {
    $('#books').DataTable({
        "ajax": "get_books.php",
        "columns": [
           { "data": "author" },
           { "data": "title" },
           { "data": "genre" },          
           { "data": "location" }         
        ]
    });
});

<强> PHP:

<?php   
    include 'conn.php';

    $rs = mysql_query("select author, title, genre, location from books");

    $result = array();
    $items = array();
    while($row = mysql_fetch_object($rs)){
        array_push($items, $row);
    }
    $result["data"] = $items;

    header("Content-type: application/json");
    header("Cache-Control: no-cache, must-revalidate");

    echo json_encode($result);
?>

<强> HTML

<table id="books" class="display tablesorter">
   <thead>
      <tr>
         <th>Author</th>
         <th>Title</th>
         <th>Genre</th>
         <th>Location</th>
      </tr>
   </thead>
</table> 

请参阅this jsFiddle以获取代码和演示。

如果您有超过几千条记录,则可以使用服务器端处理模式获得更高的性能。但在这种情况下,我建议使用jQuery DataTables发行版中的ssp.class.php帮助程序库(请参阅examples/server_side/scripts文件夹)。

答案 1 :(得分:0)

发现问题,这对我来说是愚蠢的! 在OS X El Capitan(10.11.2)上,php文件未被Safari或任何其他浏览器识别,因为它们位于我的主目录中,而不是位于/ Library / WebServer / Documents根目录中的apache!

我将我的项目移动到该目录中,因为我无法设置使用我的用户目录〜/ Sites,因为您可以在El Capitan之前使用我的用户目录(将来会更多地使用我的用户目录)。

随着这个改变,php文件被执行,因为它们包含在ajax参数中,一切正常!

感谢每一位人士的帮助。很抱歉浪费时间,但我的test.php工作了,但我没有注意到它在Web服务器根目录中!