我是網頁開發人員。 在我的腳本中使用 header() 設定「Transfer-Encoding:chunked」。並flush()到網頁。 它將在網頁中分時列印。 工作正常。 但是,當我使用 jQuery.ajax() 請求 this.it 時,它總是一起輸出(分塊無用)。
如何解決這個問題?在 jQuery ajax 中使用分塊編碼?
您不能使用 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); } ?>
您不能使用 jquery.ajax 連續讀取分塊的 http 回應。 jquery ajax僅在連線終止時才會呼叫成功回呼函數。你應該使用 此 jquery 外掛。
如果您使用 php,則可以使用以下程式碼:
在伺服器端:
串流.php