json_encode将空数组放在json的末尾

时间:2014-05-30 21:07:22

标签: javascript php jquery ajax json

我正在编写一个ajax应用程序并在php脚本中有一个函数:

public function expire_user() {
    $r=array("return"=>'OK');
    echo json_encode($r); 
}
使用此javascript调用

$.getJSON("/users/expire_user",function(data){
        alert('success');
});

问题是警报永远不会显示。我认为这是由于json_encode返回无效的json,因为当我直接转到url时,会显示

{"return":"OK"}[]

由于末尾额外的'[]'而无效json。为什么json_encode将空数组放在最后?如何摆脱它以便我可以接收有效的json?

2 个答案:

答案 0 :(得分:2)

狂野猜测,但也许您应该在PHP函数中为JSON设置正确的标头,如下所示:

public function expire_user() {
    $r=array("return"=>'OK');
    header("Content-type: application/json");
    echo json_encode($r); 
}

或者实际上将内容发送为X-JSON标头,如下所示:

public function expire_user() {
    $r=array("return"=>'OK');
    $json_data = json_encode($r);
    header('X-JSON: (' . $json_data . ')');
    header('Content-type: application/x-json');
    echo $json_data;
}

使用X-JSON附带的标题时是application/x-json还是正常的application/json有点生气,但添加此警告可帮助您进行调试。

答案 1 :(得分:1)

这不是一个很好的答案"但我假设您的脚本在echo json_encode(array());之后的某个时间运行了一些其他代码(可能是expire_user())叫做。要确保这是最后一件事,您可以使用die()exit()

public function expire_user() {
    $r = array("return"=>'OK');
    die(json_encode($r));
}

但是,我建议你尝试调试真正的问题。例如,如果你有一个URL路由器而不是处理请求和调用方法..它可能会错误地回显额外的字符(这可能会导致更多的问题)。如果您发布调用expire_user()的代码,我可以帮助进一步调试。


免责声明:认为这是一个有生产价值的解决方案。但它需要更多的调试。