最近我的WordPress插件在AJAX调用中的DEV环境(在两个不同的盒子上)开始失败。我看到的是,当我打电话时:
$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
的结果分配给变量而不是回显,结果很好,但是在那一点检查输出缓冲区会显示已插入一个+
。
不幸的是,我不确定我在我的环境中做了什么改变就开始了这种行为,因为我等了很长时间来调试它。我不知道从哪里开始。
环境是运行Wordpress 3.2.1的PHP 5.3.5
为什么调用json_encode
会在输出缓冲区中放入ANYTHING,因为我没有回应结果?
答案 0 :(得分:1)
从干净的PHP环境开始,写入并查看是否打印了+。如果是这样,那就是PHP错误。
摆脱上面的代码,输入你的代码,看它是否打印+。如果是这样,那么它就是您代码中的错误。
开始重新修改PHP环境。测试,每次更改后,它会打印+。当它发生时,你就找到了罪魁祸首。
如果,最后,你仍然无法看到+,那么它就是魔法。 ; - )
带回家的教训:永远不要让臭虫徘徊太久。