Я не знаю Вашу архитектуру . Но лучше, если со стороны 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
все вьюшки принимают одно и тоже, так что вьюшка должна быть не из одного эха как у вас
а получить данные и уже внутри себя делать все преобразования и вывод.
Если за заголовки ответа отвечает другая часть ,
то сообщить об этом.
Все надо решать под конкретный случай.
Часто вью не сама выводит в поток , а передает респонс дальше по цепочке.