标头已发送 Yii2 错误,无法使用任何建议的方法解决它

问题描述 投票:0回答:2

这可能是重复的问题,但我已经尝试了所有可能的方法来解决 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 返回等,但没有成功。

请推荐。

json yii2
2个回答
1
投票

尝试使用 return 而不是 echo
(并避免死亡())

public function sendJsonResponse($data) {
    ob_start();
    ob_clean();
    header('Content-type: application/json');
    return json_encode($data);
}

无论如何,请检查您的控制器中是否正在使用其他

return
echo
来获取代码中某处的其他值,并重构您的代码以避免这种情况。

您应该在一次退货中发送所有价值


0
投票

@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 错误。

© www.soinside.com 2019 - 2024. All rights reserved.