Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法为jQuery数据表解析从php返回的json_Javascript_Php_Jquery_Mysql_Datatables - Fatal编程技术网

Javascript 无法为jQuery数据表解析从php返回的json

Javascript 无法为jQuery数据表解析从php返回的json,javascript,php,jquery,mysql,datatables,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数据表中,我有

我有一个简单的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数据表中,我有:

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

$(文档).ready(函数(){
$('#books')。数据表({
“bServerSide”:正确,
“sAjaxSource”:“/get_books.php”
});
});
当我使用该脚本运行网页时,会收到一个警报:

DataTables警告(表id='books'):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);

?>


返回应该是什么样子?我如何生成它?

JS和PHP代码都有很多问题

如果
书籍
表中的记录少于几千条,我建议您通过删除
“bServerSide”:true来禁用服务器端处理模式,以启用客户端处理模式

JavaScript

$(文档).ready(函数(){
$('#books')。数据表({
“ajax”:“get_books.php”,
“栏目”:[
{“数据”:“作者”},
{“数据”:“标题”},
{“数据”:“流派”},
{“数据”:“位置”}
]
});
});
PHP:


HTML

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

作者
标题
体裁
位置
有关代码和演示,请参阅


如果您有数千条以上的记录,那么使用服务器端处理模式将获得更高的性能。但在这种情况下,我建议使用jQuery DataTables发行版中提供的帮助程序库(请参见
示例/server\u-side/scripts
文件夹)。

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

我将我的项目移到了那个目录中,因为我无法像El Capitan之前那样设置使用我的用户目录~/站点的内容(将来还会继续)

有了这个更改,php文档在包含在ajax参数中时就可以执行了,一切正常


谢谢大家的帮助。很抱歉浪费了时间,但是我的test.php工作正常,但我没有注意到它位于web服务器根目录中

请尝试typeof(此处返回的数据),并确认该值是object而不是string。有时,您需要设置头来重新命名json,但不确定您的意思。我应该把(…)的类型放在哪里。设置标题意味着什么?您应该使用浏览器的工具检查ajax请求,并确保响应符合预期。我在Safari中查看了web开发人员工具,但没有找到实际响应。这个错误似乎表明解析器遇到了一个'>',它位于php页面中,而不是来自页面的响应中。这就是“设置标题”的意思:非常感谢您的代码!这让我通过了解析错误!我仍然没有在数据表中看到任何东西。我试着让jQuery和DataTable为我做这件事。有了上面描述的JSON,下面是我为表所做的:AuthorTitleGenreLocation@JohnWooten,我已经更新了答案,添加了location列。当我使用一个用于JSON数据的文件时,我终于能够得到我想要的。我在控制台中运行get_books.php文件,并将输出粘贴到JSON.txt文件中。当我使用ajax:“./JSON.txt”时,一切正常!我想对于一个小数据集,我可以使用这个文件,并在最后更新它?但是,我希望能够使用从get_books.php返回的JSON。它没有给我一个解析错误,但也没有填充数据。我通过JSONLint运行了get_books.php输出,它说它是有效的。@JohnWooten,请确保包含了对
header()
的调用,以设置响应的内容类型。