【问题标题】:Call to json_encode puts extraneous '+' in output buffer调用 json_encode 将无关的“+”放入输出缓冲区
【发布时间】:2012-01-15 00:29:30
【问题描述】:

最近某个时候,我的 WordPress 插件在我的 DEV 环境(在两个不同的盒子上)中的 AJAX 调用开始失败。我看到的是,当我打电话时:

$t = json_encode(<some array>);

一个无关的+ 字符被插入到输出缓冲区中。我通过查看ob_get_content() 调用的结果观察到了这一点。 $t 显示正确的 JSON 结果,&lt;some array&gt; 的内容似乎无关紧要。

我确定这本身不是 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,我看过那个帖子,但它似乎真的不适用。

标签: php ajax wordpress json


【解决方案1】:

从一个干净的 PHP 环境开始,编写并查看它是否打印 +。如果是这样,那就是 PHP 错误。

摆脱上面的代码,放入你的代码,看看它是否打印+。如果是这样,那是你的代码中的一个错误。

开始重新修改 PHP 环境。测试,每次更改后,它都会打印+。当它发生时,你就找到了罪魁祸首。

如果最后你仍然看不到 +,那就太神奇了。 ;-)

带回家的教训:永远不要让虫子逗留太久。

【讨论】:

  • 我终于在一个 php 文件中绊倒了错误的“+”,就在左括号之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2014-04-27
  • 2012-10-22
  • 2015-08-26
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多