2
我有一个客户端JS/AJAX脚本是这样的:阿贾克斯重新发送的XMLHttpRequest
<p>server time is: <strong id="stime">Please wait...</strong></p>
<script>
function updateAjax() {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==3 && xmlhttp.status==200) {
document.getElementById("stime").innerHTML=
xmlhttp.responseText;
}
if (xmlhttp.readyState==4) {
xmlhttp.open("GET","date-sleep.php",true);
xmlhttp.send();
}
}
xmlhttp.open("GET","date-sleep.php",true);
xmlhttp.send();
}
window.setTimeout("updateAjax();",100);
</script>
而一个服务器端:
<?php
echo 6;
for ($i=0; $i<10; $i++) {
echo $i;
ob_flush(); flush();
sleep(1);
}
?>
后第一个 '开放' 和 '发送'它工作正常,但当服务器完成脚本和xmlhttp.readyState == 4
然后xmlhttp重新发送请求,但没有任何反应。
我想通了,它在Iceweasel中有效。我想这是因为一些Firefox缓存不能正常工作。在'if'块中修改innerHTML将会改变脚本的行为,它应该在服务器发送下一个数据后不断更新页面,不仅在连接关闭时。 – jllj
我上面的解决方案是跨浏览器,只是您没有正确测试浏览器的XHR对象。我也会将其添加到答案中。 –
Ctrl + F5你的Firefox,并尝试给我的脚本。它应该完全按照你想要的做法,并且如果不是,可以跨浏览器兼容,试着在[jsfiddle](http://jsfiddle.net)或其他现场风景中重现你的问题。 –