Javascript json_编码将空数组放在json的末尾

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返

我正在编写一个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?

胡乱猜测,但也许您应该在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的