我正在编写一个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?
答案 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()
的代码,我可以帮助进一步调试。
免责声明:我不认为这是一个有生产价值的解决方案。但它需要更多的调试。