Ajax响应中的杂散字符


Stray character in Ajax response?

我使用的是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顺便说一句,谢谢!

很明显,有一个0与这个javascript片段完全无关。您可以看到,您剪掉了响应的最后一个字符,它删除了},但保留了0。您需要查看PHP/HTML的其余部分,因为输出的某个地方有一个杂散字符。

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

试试这个

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

这意味着add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost'); php代码后面/里面有一些东西在回响。查找print_r()、echo或类似的内容。