出于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
,并不感觉它是&#39;应该怎么做。
此代码在我的计算机上脱机工作(Windows / uWamp),我无法理解错误。我怀疑来自OVH的东西,但不能确定并且不知道在哪里看。以下是此主机的phpinfo:http://darxnake.fr/nadau3/pages/info/
你能帮我看看发生了什么吗?谢谢。
修改:
最终确实找到了造成这个问题的原因。 Cakephp2会在每次响应时发送一个名为Content-Length
的HTTP标头。虽然传递的大小是准确的(14代码中传递给14个字符的标题),但渲染的字符串被剥离。如果我在CakePhp lib(/lib/Cake/Network/CakeResponse.php)中禁用此标头,则渲染字符串是固定的。
在我的本地电脑上,这个标题不会发送(不知道为什么),在OVH上使用相同的测试,但使用CakePhp 3时,也不会发送此标题。
所以我禁用了它的lib代码,问题就消失了,不过如果有人可以解释会发生什么,如果我做错了什么就禁用它。我对HTTP标头不是很熟悉......
答案 0 :(得分:0)
我确切地知道为什么但是在使用之后;
$this->autoRender = false;
你无法准确得到实际结果。我也面临过这种情况。 在我的情况下,我删除了autoRender并且工作正常。 如果不是强制性的,请尝试删除该行。