即使echo与DataTables匹配,JSON格式也会出错

时间:2010-11-19 02:48:17

标签: php mysql pdo datatables

我运行了一个冗长的PHP脚本,我修改为PDO格式,而不是糟糕的mysql Db调用。在脚本的末尾,$ output是json编码的:

echo json_encode( $output );

当我运行这两个脚本时,输出到屏幕是IDENTICAL但是我的jquery DataTables程序在PDO编码结果上返回错误而不是mysql返回。

我在两个结果上运行正则表达式并且它们是IDENTICAL所以为什么这种情况发生在我之外。

有人遇到过同样的问题吗?

修改

DataTables错误状态:

  

DataTables警告:来自的JSON数据   服务器无法解析。这是   由JSON格式错误引起。

5 个答案:

答案 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代码。