@QNA-1976

Нужен ли вид для JSON?

public function regenTimersAction()
{
    if ($this->isAjax()) {
        $json = [];
        // тут собираем данные в массив JSON
        $regen_json = json_encode($json);
        $this->viewForAjax('regen', compact('regen_json'));
    } else {
        throw new Error('Обращение к JSON без AJAX', 404);
    }
}

вид regen.php
echo $regen_json;
забираем
$(function () {
    $.getJSON('/json/regen-timers', function (json) {
        console.log(json); // тут объект прилетел
    }).fail(function (error) {
        console.error(error.responseText);
    });
});

а нужен ли лишний инклуд с файлом вида всего лишь echo, разве нельзя вот так
public function regenTimersAction()
{
    if ($this->isAjax()) {
        $json = [];
        // тут собираем данные в массив JSON
        echo json_encode($json);
    } else {
        throw new Error('Обращение к JSON без AJAX', 404);
    }
}

Как вообще принято делать с JSON, нужно ли вид создавать?
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
Я не знаю Вашу архитектуру . Но лучше, если со стороны js будут еще получены заголовки
function json_responce($len=null){
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header('Content-Type: application/json');
    if(!is_null($len)){
        header('Content-Length: ' . $len);
    }
}

Чтобы не кешировалось мне нужно всегда. Под ваши задачи можете убрать.
По вкусу(необходимости) можно добавить, что ответ в UTF-8 .
Контент тайп решает проблемы однозначного соответствия со стороны броузера.
Но возможно теперь доля ошибавшихся броузер стала пренебрежительно мала и совет не актуален.

На счет собственно самого представления.
Тут оно неправильно применено.
Роутер должен рашать ответ модели вывести в виде html , json, xml
все вьюшки принимают одно и тоже, так что вьюшка должна быть не из одного эха как у вас
а получить данные и уже внутри себя делать все преобразования и вывод.
Если за заголовки ответа отвечает другая часть ,
то сообщить об этом.

Все надо решать под конкретный случай.
Часто вью не сама выводит в поток , а передает респонс дальше по цепочке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы