这可能是重复的问题,但我已经尝试了所有可能的方法来解决 Yii2 中的这个错误,但没有成功
我有我的基本控制器和功能,如下所示
/**
* Send given object as json object
*
* @param array $data
* @return json
*/
public function sendJsonResponse($data) {
ob_start();
ob_clean();
header('Content-type: application/json');
echo json_encode($data);
die;
}
我在任何子控制器中调用此函数,例如
return $this->sendJsonResponse(['message'=>'Some message here','status'=>true]);
有了这个,我总是收到 headers already sent 错误,尝试了 Yii2 社区建议的方法来更改 echo 返回等,但没有成功。
请推荐。
尝试使用 return 而不是 echo
(并避免死亡())
public function sendJsonResponse($data) {
ob_start();
ob_clean();
header('Content-type: application/json');
return json_encode($data);
}
无论如何,请检查您的控制器中是否正在使用其他
return
或 echo
来获取代码中某处的其他值,并重构您的代码以避免这种情况。
您应该在一次退货中发送所有价值
@ScaisEdge,谢谢您的回答,由于一些奇怪的原因,每当我们使用ajax时,您建议的方法都不会产生预期的结果,不知道为什么要修改我的方法,如下所示
/**
* Send given object as json object
*
* @param array $data
* @return json
*/
public function sendJsonResponse($data) {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $data;
}
这按预期工作,我将发布确认这是否解决了我最初收到的 headeralreadysent 错误。