1

出于 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;
    }
}

将最后一个更改为returnadie会显示完整的字符串,但我不喜欢die在控制器中,感觉不应该这样做。

此代码在我的计算机(Windows / uWamp)上脱机工作,我不明白出了什么问题。我怀疑来自 OVH 的一些东西,但不能确定也不知道去哪里找。这是该主机的 phpinfo:http: //darxnake.fr/nadau3/pages/info/

你能帮我看看是怎么回事吗?谢谢你。

编辑 :

Finaly确实找到了导致问题的原因。Content-LengthCakephp2 发送一个随每个响应调用的 HTTP 标头。虽然传递的大小是准确的(在代码中询问 14 个字符的 14 个传递到标题),但呈现的字符串被剥离。如果我在 CakePhp lib (/lib/Cake/Network/CakeResponse.php) 中禁用此标头,则渲染字符串是固定的。

在我的本地电脑上,这个标头没有发送(不知道为什么),并且在 OVH 上进行了相同的测试,但是对于 CakePhp 3,这个标头也没有发送。

所以我禁用了它,lib代码和问题消失了,但如果有人能解释发生了什么,如果我做错了什么禁用它。我对HTTP标头不是很熟悉...

4

1 回答 1

0

我不知道为什么,但在使用之后;

$this->autoRender = false;

您无法准确获得实际结果。我也遇到过这种情况。就我而言,我删除了 autoRender 并且工作正常。如果不是强制性的,请尝试删除该行。

于 2016-07-12T12:05:11.213 回答