Javascript json_编码将空数组放在json的末尾
我正在编写一个ajax应用程序,在php脚本中有一个函数:Javascript json_编码将空数组放在json的末尾,javascript,php,jquery,ajax,json,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返
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?胡乱猜测,但也许您应该在PHP函数中为json设置正确的头,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
标题发送,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
,这有点生疏,但添加此警告以帮助您进行调试。胡乱猜测,但您可能应该在PHP函数中为JSON设置正确的头,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
标题发送,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
,这有点生疏,但添加此警告以帮助您进行调试。胡乱猜测,但您可能应该在PHP函数中为JSON设置正确的头,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
标题发送,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
,这有点生疏,但添加此警告以帮助您进行调试。胡乱猜测,但您可能应该在PHP函数中为JSON设置正确的头,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
标题发送,如下所示:
public function expire_user() {
$r=array("return"=>'OK');
header("Content-type: application/json");
echo json_encode($r);
}
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
,这有点生疏,但是添加了这个警告来帮助您进行调试。这不是一个很好的“答案”,但我假设您的脚本正在运行一些其他代码(可能echo JSON\u encode(array())
)调用过期后的一段时间。要确保这是最后一次调用,您可以使用或:
但是,我建议您尝试调试真正的问题。例如,如果您有一个URL路由器,而不是在处理请求和调用方法。它可能会错误地回显额外的字符(这可能会导致更多问题)。如果您发布调用expire\u user()
的代码,我可以帮助您进一步调试
<强>免责声明:< /强>我不认为这是一个值得生产的解决方案。不过,它需要更多的调试。
这不是一个“答案”,但我假设您的脚本在调用expire\u user()
后的一段时间运行其他代码(可能echo json_encode(array());
)。要确保这是最后一次调用,您可以使用或:
但是,我建议您尝试调试真正的问题。例如,如果您有一个URL路由器,而不是在处理请求和调用方法。它可能会错误地回显额外的字符(这可能会导致更多问题)。如果您发布调用expire\u user()
的代码,我可以帮助您进一步调试
<强>免责声明:< /强>我不认为这是一个值得生产的解决方案。不过,它需要更多的调试。
这不是一个“答案”,但我假设您的脚本在调用expire\u user()
后的一段时间运行其他代码(可能echo json_encode(array());
)。要确保这是最后一次调用,您可以使用或:
但是,我建议您尝试调试真正的问题。例如,如果您有一个URL路由器,而不是在处理请求和调用方法。它可能会错误地回显额外的字符(这可能会导致更多问题)。如果您发布调用expire\u user()
的代码,我可以帮助您进一步调试
<强>免责声明:< /强>我不认为这是一个值得生产的解决方案。不过,它需要更多的调试。
这不是一个“答案”,但我假设您的脚本在调用expire\u user()
后的一段时间运行其他代码(可能echo json_encode(array());
)。要确保这是最后一次调用,您可以使用或:
但是,我建议您尝试调试真正的问题。例如,如果您有一个URL路由器,而不是在处理请求和调用方法。它可能会错误地回显额外的字符(这可能会导致更多问题)。如果您发布调用expire\u user()
的代码,我可以帮助您进一步调试
<强>免责声明:< /强>我不认为这是一个值得生产的解决方案。但是它需要更多的调试。
我们可以看看如何从GET/users/expire\u user
调用expire\u user
?我敢打赌,如果你马上杀死这个脚本,它会起作用:die(json_encode($r))代码>可能重复的不要认为这是重复的,因为Sam的评论对我有用,而这不在其他答案中@Sam将你的代码作为答案发布,我会接受。@Sam所以根据你的逻辑,代码应该在expire\u user
函数末尾使用die()
或exit()
。@JakeGould我实际上是在向OP询问更多信息,因为[]
在他显示的代码中没有返回任何内容(即调用expire\u user()
的内容。我通过die()
示例证明了这一点。我认为这不值得在产品中使用。我们可以看看expire\u user
是如何从GET/users/expire\u user
调用expire\u user的吗?我敢打赌,如果您立即杀死脚本:die(json\u encode($r))
可能重复的不要认为这是重复的,因为Sam的