как исключить значение null в Json encode Yii2?

#php #jquery #json #yii2

#php #jquery #json #yii2

Вопрос:

Я пытаюсь создать или обновить модель в модальном формате, и ответ будет нулевым после Json, и мой модальный код не будет скрыт после действия. сеть показывает это

Ошибка синтаксиса: JSON.parse: неожиданный символ без пробелов после данных JSON в строке 1, столбец 103 данных JSON

ПОСЛЕ {"status":true,"type":"success","title":"¡Excelente!","msj":"Se han guardado los datos correctamente"}null этого null в конце, что это значит? введите описание изображения здесь

Мои действия выглядят следующим образом:

 public function run($id = null)
{
    if ($id == null) {
        $model = new BancosConcepto();
    } else {
        $model = BancosConcepto::findOne($id);
    }

    $model->loadDefaultValues();
    $show_form = true;

    $data = array();
    if (Yii::$app->request->isPost) {
        $model->load(Yii::$app->request->post());

        if($model->save()) {
            $show_form = false;
            $data['status'] = true;
            $data['type'] = 'success';
            $data['title'] = '¡Excelente!';
            $data['message'] = 'El concepto se registró correctamente.';
        }
    }

    if ($show_form) {
        return $this->controller->renderAjax('_form', [
            'model' => $model,
        ]);
    } else {
        Yii::$app->response->format = Response::FORMAT_JSON;
        echo JSON::encode($data);
    }
}
  

Мое представление выглядит следующим образом:

 $( document ).on( "click", ".btn-add", function(e) {

    url = $(this).attr('href');
    $.ajax({
        type: "GET",
        url: url,
        beforeSend: function() {    
            $("#modal-win .modal-dialog").addClass("modal-sm")
            $("#modal-win").modal('show');
        },
        success: function(data){
            $("#modal-win .modal-content").html(data);
        }
    });
    return false;

});
  

Комментарии:

1. Этого нет в вашем JSON {...json...}null , после него выводится что-то другое. Сделайте exit(JSON::encode($data)); и проверьте ob_get_level() , чтобы убедиться, что выходные буферы не включены, оно должно быть равно 0. После отправки вашего ответа JSON это должно быть окончанием приложения, поскольку вы можете отправить только один ответ Json. У вас могло быть ?>null в одном из ваших файлов и т.д. Кто знает. PS Я не использую Yii.

2. добавьте exit() после «echo JSON::encode($data);»

3. У меня не было никакого null, я создаю новый проект и добавляю эти представления, и сеть говорит то же самое. Можно ли установить версию Json для этого?

4. У меня есть другой проект с yii версии 2.0.11 и он отлично работает, новый проект имеет версию 2.0.14 и порождает эту проблему, есть ответ?

Ответ №1:

Ваше действие должно возвращать ответ, а не повторять его:

 if ($show_form) {
    return $this->controller->renderAjax('_form', [
        'model' => $model,
    ]);
} else {
    return $this->controller->asJson($data);
}