出于 ajax 的目的,我试图从 Cakephp (2.8.5) 控制器呈现一个字符串,而没有任何视图。为了实现这一点,我通常编写代码,然后$this->render = false
在之前使用return
它,它工作正常。
我在 OVH(一家法国互联网服务提供商)上上传了网站,但出了点问题,呈现的字符串没有按应有的方式运行。在达到一定大小之前,它不会按预期显示。
为了演示这个问题,我在线准备了一个动态页面(您可以将 15 更改为任意数字,低于 15 会生成问题): http ://darxnake.fr/nadau3/pages/test/15
代码很简单:
页面控制器.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
adie
会显示完整的字符串,但我不喜欢die
在控制器中,感觉不应该这样做。
此代码在我的计算机(Windows / uWamp)上脱机工作,我不明白出了什么问题。我怀疑来自 OVH 的一些东西,但不能确定也不知道去哪里找。这是该主机的 phpinfo:http: //darxnake.fr/nadau3/pages/info/
你能帮我看看是怎么回事吗?谢谢你。
编辑 :
Finaly确实找到了导致问题的原因。Content-Length
Cakephp2 发送一个随每个响应调用的 HTTP 标头。虽然传递的大小是准确的(在代码中询问 14 个字符的 14 个传递到标题),但呈现的字符串被剥离。如果我在 CakePhp lib (/lib/Cake/Network/CakeResponse.php) 中禁用此标头,则渲染字符串是固定的。
在我的本地电脑上,这个标头没有发送(不知道为什么),并且在 OVH 上进行了相同的测试,但是对于 CakePhp 3,这个标头也没有发送。
所以我禁用了它,lib代码和问题消失了,但如果有人能解释发生了什么,如果我做错了什么禁用它。我对HTTP标头不是很熟悉...