Javascript 无法为jQuery数据表解析从php返回的json
我有一个简单的mysql数据库表和图书馆的书籍。我正在使用php页面检索书籍列表。这就是它的回报: php get_books.phpJavascript 无法为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数据表中,我有
{"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()
的调用,以设置响应的内容类型。