搜尋

首頁  >  問答  >  主體

支援jQuery的Transfer-Encoding:chunked

我是網頁開發人員。 在我的腳本中使用 header() 設定「Transfer-Encoding:chunked」。並flush()到網頁。 它將在網頁中分時列印。 工作正常。 但是,當我使用 jQuery.ajax() 請求 this.it 時,它總是一起輸出(分塊無用)。

如何解決這個問題?在 jQuery ajax 中使用分塊編碼?

P粉566048790P粉566048790466 天前745

全部回覆(1)我來回復

  • P粉366946380

    P粉3669463802023-10-26 11:10:35

    您不能使用 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);
       }
    
    
    
    
    ?>

    回覆
    0
  • 取消回覆