$ This- & gt; autorender = false в Cakephp не показывает всю строку, как ожидалось

В целях ajax я пытаюсь визуализировать строку из контроллера Cakephp (2.8.5) без какого-либо представления. Для этого я обычно пишу код, а затем использую $this->render = false перед return и работает нормально.

Я загрузил веб-сайт на OVH (французского интернет-провайдера), и что-то не так, отображаемая строка не работает должным образом. Он не отображается должным образом, пока не достигнет определенного размера.

Чтобы продемонстрировать проблему, я подготовил динамическую страницу онлайн (вы можете изменить 15 на любое число, ниже 15 генерирует проблему):
http://darxnake.fr/nadau3/pages/test/15

код очень прост:

PagesController.php:

class PagesController extends AppController {
public function test($nb=1) {

$str = "";
$char = "o";
$upper = true;

for ($i=0; $i < $nb; $i++) {
$str .= $upper ? strtoupper($char) : strtolower($char);
$upper = $upper ? false : true;
}

$this->autoRender = false;

return $str;
}
}

Смена последнего return по die отображает полную строку, но мне не нравится die в контроллерах не чувствуется, что так и должно быть.

Этот код работает в автономном режиме на моем компьютере (Windows / uWamp), и я не могу понять, что не так. Я подозреваю что-то из OVH, но не могу быть уверен и не знаю, где искать. Вот phpinfo для этого хоста: http://darxnake.fr/nadau3/pages/info/

Не могли бы вы помочь мне узнать, что происходит? Спасибо.

Редактировать :

Наконец-то нашли причину проблемы. Cakephp2 отправляет заголовок HTTP с именем Content-Length с каждым ответом. В то время как переданный размер является точным (14 переданных в заголовок для 14 символов, указанных в коде), обработанная строка удаляется. Если я отключу этот заголовок в CakePhp lib (/lib/Cake/Network/CakeResponse.php), строка рендеринга будет исправлена.

На моем локальном компьютере этот заголовок не отправляется (не знаю почему) и на OVH с тем же тестом, но с CakePhp 3 этот заголовок также не отправляется.

Так что я отключил его, код lib и проблема исчезли, хотя, если кто-то может объяснить, что происходит, и если я сделал что-то не так, отключив его. Я не очень знаком с заголовками HTTP …

1

Решение

Я не знаю точно, почему, но после использования;

$this->autoRender = false;

Вы не можете получить реальный результат точно .. Я тоже сталкивался с этой ситуацией.
В моем случае я убрал autoRender и работал нормально.
Попробуйте удалить эту строку, если не обязательно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]