7

私はウェブ開発者です。私のスクリプトでは、header() を使用して「Transfer-Encoding:chunked」を設定します。そしてflush()をウェブページに。時分割でWebページに印刷されます。それは正常に動作します。しかし、jQuery.ajax() を使用して this.it を要求すると、常にすべて一緒に出力されます (チャンクされて役に立たない)。

これをどのように解決するのですか?jQuery ajaxでチャンクエンコーディングを使用しますか?

4

1 に答える 1

12

jquery.ajax を使用して、チャンクされた http 応答を継続的に読み取ることはできません。jquery ajax は、接続が終了したときにのみ、成功のコールバック関数を呼び出します。この jquery プラグインを使用する必要があり ます。

php を使用している場合は、次のコードを使用できます。

 <html>
        <head>
            <script src="jquery-1.4.4.js"></script>
            <script src="jquery.stream-1.2.js"></script>
            <script>

                var println = function(string){
                    $("#console").append(string+"<br />");
                }

                $(document).ready(function(){



                    $.stream("stream.php",{
                        open:function(){
                            println("opened");
                        },
                        message:function(event){
                            println(event.data);
                        },
                        error:function(){
                            println("error");
                        },
                        close:function(){
                            println("closed");
                        }
                    });



                });
            </script>
        </head>
        <body>


            <div id="console"></div>

        </body>
    </html>

サーバー側で:

ストリーム.php

<?php


   header('Content-Encoding', 'chunked');
   header('Transfer-Encoding', 'chunked');
   header('Content-Type', 'text/html');
   header('Connection', 'keep-alive');

   ob_flush();
   flush();

   echo("23123454645645646;");


   $p = "";
   for ($i=0; $i < 1024; $i++) { 
       $p .= " ";
   };
   echo($p.";");



   for ($i = 0; $i < 10000; $i++) {
      echo('6;string;');
      ob_flush();
      flush();
      sleep(2);
   }




?>
于 2012-07-05T03:40:22.777 に答える