我运行了一个冗长的PHP脚本,我修改为PDO格式,而不是糟糕的mysql Db调用。在脚本的末尾,$ output是json编码的:
echo json_encode( $output );
当我运行这两个脚本时,输出到屏幕是IDENTICAL但是我的jquery DataTables程序在PDO编码结果上返回错误而不是mysql返回。
我在两个结果上运行正则表达式并且它们是IDENTICAL所以为什么这种情况发生在我之外。
有人遇到过同样的问题吗?
DataTables错误状态:
DataTables警告:来自的JSON数据 服务器无法解析。这是 由JSON格式错误引起。
答案 0 :(得分:1)
使用的一种方法是从Firebug(或Webkit的检查器或其他)获取JSON返回并通过http://jsonlint.com运行它。如果JSON字符串是相同的,那么我猜测还有其他东西被输出(可能是PHP警告,或者只是某个地方的字符串的回声),这导致解析失败。 DataTables使用jQuery 1.4中内置的JSON解析器,并且在解析器无法解码字符串时会出现此错误。
如果这没有用,你能给我们一个指向页面的链接吗?
答案 1 :(得分:1)
我也遇到了这个问题。仅仅因为我使用jquery 1.5.1。 在我更改为用户1.4.4后,问题就消失了。
答案 2 :(得分:1)
对于所有来自谷歌的人来说,试试这个:
echo '('.json_encode( $output ).')';
答案 3 :(得分:1)
我遇到了同样的问题,但只有在使用 PDO和预备语句时才会出现这种情况。 JSONLint验证输出,但DataTables不接受它。 我已经使用getJSON创建了自己的函数来从我的PHP数据源中获取JSON数据,这实际上是有效的。 另外我创建了一个重复的数据源,我在其中使用mysqli,在浏览器中查看输出,并在notepad ++中的2个输出上运行比较时,两者都是相同的。
答案 4 :(得分:0)
我有完全相同的错误并使用验证器确保我的格式有效使用此:http://jsonformatter.curiousconcept.com/
这是有效的,事实证明我的PHP脚本由于我的一个愚蠢的错误而“回显”其他数据。
尝试直接在浏览器中调用生成JSON的脚本,看看是否有其他内容正在显示,搞乱了dataTable收到的JSON代码。