【发布时间】:2012-01-15 00:29:30
【问题描述】:
最近某个时候,我的 WordPress 插件在我的 DEV 环境(在两个不同的盒子上)中的 AJAX 调用开始失败。我看到的是,当我打电话时:
$t = json_encode(<some array>);
一个无关的+ 字符被插入到输出缓冲区中。我通过查看ob_get_content() 调用的结果观察到了这一点。 $t 显示正确的 JSON 结果,<some array> 的内容似乎无关紧要。
我确定这本身不是 PHP 问题,因为它似乎只发生在 WordPress 的上下文中。
我将它隔离到我的插件中的以下功能:
function my_action_callback() {
$a = array("a" => "orange", "b" => "banana", "c" => "apple");
echo json_encode($a);
die(); // this is required to return a proper result
}
my_action_callback 是一个注册回调函数,由 WordPress 在 AJAX 调用中调用。我可以将json_encode 的结果分配给一个变量而不是回显,结果很好,但是在此时检查输出缓冲区显示已经插入了一个+。
不幸的是,我不确定我在环境中所做的什么更改导致了这种行为,因为我等了太长时间才调试它。我不知道现在从哪里开始。
环境是 PHP 5.3.5 运行 Wordpress 3.2.1
为什么调用 json_encode 会将 ANYTHING 放入输出缓冲区,因为我没有回显结果?
【问题讨论】:
-
查看所有文件。我猜在 ob_start 和你的 ob_get_contents 之间有一个“+”..
-
您是否能够创建一些紧凑版本的代码来重现此问题?
-
可能与这个问题有关:stackoverflow.com/questions/6811845/…
-
@halfdan,这是我的第一个想法,但我在调用 json_encode() 之前检查了输出缓冲区,它是空的。 Thej 紧随其后,有一个 '+'
-
@Jonathan,我看过那个帖子,但它似乎真的不适用。