Ajax 响应中的杂散字符?

Posted

技术标签:

【中文标题】Ajax 响应中的杂散字符?【英文标题】:Stray character in Ajax response? 【发布时间】:2011-09-03 13:42:10 【问题描述】:

我正在使用 wordpress。我使用 jQuery 进行 ajax 调用,php 回显出一个 JSON 对象,但我在 javascript 中得到的响应末尾添加了一个“0”,这使得解码 json 对象失败。

PHP:

function newspaper_getpost() 
    $d = array('foo' => 'bar', 'baz' => 'long');
    echo json_encode($d);

add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost');

JS:

  $.post(MyAjax.ajaxurl,
        action : 'newspaper_getpost',
        postID : $(this).val()
        , function(response) 
              console.log(response);
  );

输出:

"foo":"bar","baz":"long"0

我试过了

echo substr( json_encode($d), 0, -1);

得到了

"foo":"bar","baz":"long"0

所以我确定它不是 PHP 方面。我可以在响应的末尾去掉“0”,但我觉得有更大的事情正在发生,我不想做一个廉价的黑客来让它工作。 jQuery 1.6.1 顺便说一句。谢谢!

【问题讨论】:

您使用的是最新版本的 jQuery,还是 minor-major 版本?编辑:尝试直接在 Chrome Inspector 或 Firebug 上调试响应,看看您是从 PHP 收到它还是 JS 问题。 残留的0 会破坏您的代码吗?如果没有,我就别管它了。这可能是浏览器的怪癖。 看起来错误来自 add_action() 之后的某些内容。此外,请确保您通过在 post 函数中完成 type 参数来告诉 $.post 它将接收 json。 【参考方案1】:

很明显有一个 0 与这个 javascript 片段完全无关。您可以看到您从响应中删除了最后一个字符,它删除了,但 0 仍然存在。您需要查看 PHP/html 的其余部分,因为在某处输出了一个杂散字符。

如果要添加 exit();在回声之后,您会看到 0 消失。

【讨论】:

【参考方案2】:

试试这个

function newspaper_getpost() 
    $d = array('foo' => 'bar', 'baz' => 'long');
    die(json_encode($d));

add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost');

【讨论】:

【参考方案3】:

这意味着在您的add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost'); php 代码之后/内部有一些回声。寻找 print_r()、echo 或类似的东西。

【讨论】:

以上是关于Ajax 响应中的杂散字符?的主要内容,如果未能解决你的问题,请参考以下文章

程序中的杂散“\303”和杂散“\215”——为啥?

调试节点集群中的杂散未捕获异常 (ECONNRESET)

string中的杂散知识点

telnet 协商中的杂散数据字节。它来自哪里?

在vim中的空格后轻松对齐字符

boost::iostreams::copy() 的异常