1

ajax の目的で、ビューなしで Cakephp (2.8.5) コントローラーから文字列をレンダリングしようとしています。これを達成するために、私は通常、コーディングして$this->render = falseから の前に使用するreturnと、正常に動作します。

OVH (フランスのインターネット サービス プロバイダー) に Web サイトをアップロードしましたが、何か問題があり、レンダリングされた文字列が正常に動作しません。ある程度の大きさになるまでは、意図したとおりに表示されません。

問題を実証するために、オンラインで動的ページを用意しました (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を a で変更dieすると完全な文字列が表示されますがdie、コントローラーでは好きではありません。

このコードは私のコンピューター (Windows / uWamp) でオフラインで動作し、何が問題なのか理解できません。OVH から何かを疑っていますが、確信が持てず、どこを見ればよいかわかりません。このホストの phpinfo は次のとおりです: http://darxnake.fr/nadau3/pages/info/

何が起こっているのかを知るのを手伝ってくれませんか? ありがとうございました。

編集 :

最後に、問題の原因を突き止めました。Cakephp2 はContent-Length、すべての応答で呼び出される HTTP ヘッダーを送信します。渡されたサイズは正確ですが (コードで要求された 14 文字のヘッダーに 14 が渡されます)、レンダリングされた文字列は削除されます。CakePhp lib (/lib/Cake/Network/CakeResponse.php) でこのヘッダーを無効にすると、レンダリング文字列が修正されます。

私のローカルPCでは、このヘッダーは送信されません(理由はわかりません)。OVHではまったく同じテストですが、CakePhp 3では、このヘッダーも送信されません。

だから私はそれを無効にしました lib コードと問題はなくなりましたが、誰かが何が起こったのか説明してください。私はHTTPヘッダーにあまり慣れていません...

4

1 に答える 1

0

正確な理由はわかりませんが、使用後;

$this->autoRender = false;

実際の結果を正確に得ることはできません..私もその状況に直面しました。私の場合、autoRender を削除して問題なく動作しました。必須でない場合は、その行を削除してみてください。

于 2016-07-12T12:05:11.213 に答える