84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我是一名网络开发人员。 在我的脚本中使用 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