我正在尝试使用php和jquery创建一个理论网络聊天应用程序,我已经阅读了有关长轮询和http流的内容,并且我设法应用了文章中介绍的大多数原则。然而,有两个主要的事情我仍然无法理解。
success
函数用于ajax调用,但是如何检查数据,而连接仍然在进行?我会感激任何和所有答案,提前谢谢。
答案 0 :(得分:25)
答案 1 :(得分:5)
如何在Ajax连接期间检查结果是否仍然有效?我知道jQuery的ajax调用成功函数,但是如何在连接仍在进行时检查数据?
实际上,你可以。我已经为上述内容提供了修改后的答案,但我不知道它是否仍在等待或被忽略。在此提供更新,以便提供正确的信息。
如果您打开客户端和服务器之间的连接,则可以推送附加到响应的更新。每次更新都会导致XMLHttpRequest.onreadystatechange
事件被触发,XMLHttpRequest.readyState
的值将为3.这意味着XMLHttpRequest.responseText会继续增长。
你可以在这里看到一个例子: http://www.leggetter.co.uk/stackoverflow/7213549/
要查看JS代码,只需查看源代码即可。 PHP代码是:
<?php
$updates = $_GET['updates'];
if(!$updates) {
$updates = 100;
}
header('Content-type: text/plain');
echo str_pad('PADDING', 2048, '|PADDING'); // initial buffer required
$sleep_time = 1;
$count = 0;
$update_suffix = 'Just keep streaming, streaming, streaming. Just keep streaming.';
while($count < 100) {
$message = $count . ' >> ' . $update_suffix;
echo($message);
flush();
$count = $count + 1;
sleep($sleep_time);
}
?>
在基于Gecko的浏览器(如Firefox)中,可以使用responseText
完全替换multipart/x-mixed-replace
。我没有举例说明这一点。
使用jQuery.ajax
看起来不可能实现相同类型的功能。每当success
事件被触发时,onreadystatechange
回调都不会触发。这是令人惊讶的,因为文档说明:
但是,没有提供onreadystatechange机制,因为成功,错误,完整和statusCode涵盖了所有可能的要求。
所以文档可能是错误的,除非我误解了它?
您可以在此处看到尝试使用jQuery的示例: http://www.leggetter.co.uk/stackoverflow/7213549/jquery.html
如果您查看Firebug或Chrome开发者工具中的网络标签,您会看到stream.php
的文件大小在增长,但success
回调仍然没有消息。