通过Ajax实时传输数据

5

我想在请求完成之前访问AJAX数据,以实现类似以下的流式传输:

ajax_request.send();
interval = setInterval(function() {
    continueParsing(ajax_request.responseText);
    if (download_complete)
        clearInterval(interval);
}, 64);

目前我有一个PHP工具来将请求分成更小的块,但我更希望一次性处理所有请求。如何做到这一点(我只关心Chrome和Firefox)?


很好的问题,我认为这适用于HTML5规范,但我会确保尝试找出来。 - André Alçada Padez
从PHP发送了什么类型的数据? - André Alçada Padez
2个回答

7

好的,从像这样的PHP处理程序开始:

$content = file_get_contents('http://pplware.sapo.pt/feed/');
for($i = 0; $i < 10; $i++){
   $content .= $content;
}
echo $content;

还有一个像这样的JavaScript代码:

var client = new XMLHttpRequest();
client.open('get', 'ajax.php');
client.send();
client.onprogress = function(){
    console.log(this.responseText.length);              
}

我得到了这个控制台:

11183
137415984
1311572876
1313769728

所以,它可行....我想你可以理解其余部分 :)

太棒了,谢谢!我之前以为在请求期间使用responseText,浏览器会批评我。我猜onprogress就是我所需要的。(我正在发送二进制数据,但它被作为字符串传输)。 - Chris

2
最好使用WebSockets来实现此类功能,针对旧浏览器应有适当的回退(例如采用AJAX长轮询方式)。
由于您正在使用PHP,快速进行谷歌搜索可以找到这个项目 - http://code.google.com/p/phpwebsocket/,可能提供一种简单的方法来实现。我不知道它是否有后备技术以支持浏览器不支持WebSockets的情况,但如果没有,您可能可以将socket.io客户端库放在它之上,然后只使用phpwebsocket项目来提供服务器层。

关于套接字的想法很酷!我甚至不知道它们在Javascript中存在。然而,我认为ajax_request.onprogress对我的目的已经足够了。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接