Ajax update page

156
07 декабря 2018, 04:50

Получаю ошибку:

An Error occurred while handling another error: yii\web\HeadersAlreadySentException: Headers already sent in.

Хотя пока писал этот пост понял что это не ошибка, а возвращаемое значение вместе с частью данных. Только все равно не понимаю почему. Есть Ajax запускает следующий метод:

public function actionUpdateserver()
{
    if (Yii::$app->request->isAjax) {
        $data = Yii::$app->request->post();
        $server = Server::findOne($data["id"]);
        $server->serverName = $data['projectName'];
        $server->rates = $data["gameRate"];
        $server->idServerStatus = $data["serverStatus"];
        $server->idGameVersion = $data["gameVersion"];
        $server->dateOpen = Yii::$app->formatter->asDate($data["dateOpen"], "yyyy.MM.dd");
        $server->dateOff = Yii::$app->formatter->asDate($data["dateOff"], "yyyy.MM.dd");;
        $server->serverURL = $data["serverUrl"];
        $server->website = $data['serverUrl'];
        $server->id_openStatus = $data["openStatus"];
        if($server->update())
        {
            echo $this->test();//json_encode(["saved", "newData" => ]);
        }
        else
        {
            echo json_encode($server->errors);
        }
    }
}. 

Метод test выглядит вот так:

   private function test()
    {
        $main = new Main();
        $filter = [];
        $serverList = $main->getServersInfo($filter);
        if(!array_key_exists("statuses", $filter))
            $filter['statuses'] = 0;
        return $this->renderAjax("adminTable", ['serverList' => $serverList]);
    }. 

И вьюха которую он вызывает:

<p>Список</p>
<input type="text" placeholder="Поиск">
<button class="btn-search"></button>
<div id="table">
    <?php foreach ($serverList as $serverValue):?>
        <div class="row block-cell">
            <span class="cell"><a href="<?=$serverValue['serverURL']?>" id="urlserv"><?=$serverValue['serverName']?></a></span>
            <span class="cell"><?=$serverValue['versionName']?> / <?=$serverValue['rates']?></span>
            <span class="cell"><?php echo empty($serverValue['dateOpen']) ? "" : Yii::$app->formatter->asDate($serverValue['dateOpen'], "dd.MM.yyyy")?></span>
            <span class="cell"><?php echo empty($serverValue['dateOff']) ? "" : Yii::$app->formatter->asDate($serverValue['dateOff'], "dd.MM.yyyy")?></span>
            <span id="<?php echo ($serverValue['idServerStatus'] == 6 || $serverValue['idServerStatus'] == 3) ? "notvip":"hasvip"; ?>" class="cell"><?=$serverValue['statusName']?></span>
            <span class="cell"><a class="getForm" href="<?=Yii::$app->urlManager->createUrl('admin-get-form');?>/<?=$serverValue['id']?>" id="edit">Изменить</a> <a href="" id="deleted">Удалить</a></span>
        </div>
    <?php endforeach;?>
</div>. 

Данные обновляются вот так:

success:function(data) {
    console.log(data);
    $(".admin-table").html(data);
},  

В конце обновленных данных получаю выше описанную ошибку в виде вставки в html разметку, логи ajax ответ 200. Не могу понять почему. Прошу подсказать.

Answer 1

Yii самостоятельно формирует заголовки страницы в момент отдачи контента, вы же используете функцию echo, что моментально формирует заголовок, нарушая жизненный цикл Yii. Когда Yii формирует заголовок страницы, он обнаруживает, что заголовок уже послан и выдает соответствующую ошибку.

Забудьте про echo внутри контроллеров фреймворков.

цитата из мануала:

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
    'message' => 'hello world',
    'code' => 100,
];

https://www.yiiframework.com/doc/guide/2.0/en/runtime-responses

READ ALSO
Данные в массиве изменяются, как их получать без редактирования кода?

Данные в массиве изменяются, как их получать без редактирования кода?

Столкнулся с проблемой постоянного изменения вывода массива, мой массив

162
Как переделать hasOne() на hasMany() в примере?

Как переделать hasOne() на hasMany() в примере?

Как переделать данный пример используя hasMany() вместо hasOne() для отображения в ячейке GridView нескольких связанных данных из другой таблицы?

170
Call to a member function getImage() on null

Call to a member function getImage() on null

Подскажите пожалуйста где ошибка

202