#json #yii2
Вопрос:
Это могут быть повторяющиеся вопросы, но я перепробовал все возможные методы для устранения этой ошибки в 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]);
При этом я постоянно получаю уже отправленные заголовки с ошибками, пробовал способы, предложенные сообществом Yii2, чтобы изменить echo для возврата и т. Д., Но тщетно.
Пожалуйста, предложите.
Комментарии:
1. вы не можете
echo json_encode
сейчас, это было в более старой версии Yii2
Ответ №1:
Попробуйте использовать return, а не echo, и избегайте die()
public function sendJsonResponse($data) {
ob_start();
ob_clean();
header('Content-type: application/json');
return json_encode($data);
}
в любом случае проверьте, есть ли в вашем контроллере другое возвращаемое эхо od для другого значения в другой части кода, и выполните рефакторинг кода для avodi this. y вы должны отправить все значение только в одном возврате
Ответ №2:
@scaisEdge, спасибо за ваш ответ, по каким-то странным причинам предложенный вами метод не дает ожидаемых результатов всякий раз, когда мы используем ajax, не знаю, почему я так изменил свой метод, как указано ниже
/**
* Send given object as json object
*
* @param array $data
* @return json
*/
public function sendJsonResponse($data) {
Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;
return $data;
}
Это работает, как и ожидалось, я опубликую подтверждение того, устраняет ли это ошибку headeralreadysent, которую я первоначально получил.
Комментарии:
1. Сейчас это работает, как и ожидалось.