У меня есть на стороне клиента JS/AJAX скрипт так: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. Модификация innerHTML в этом блоке «if» изменит поведение скрипта, который должен обновлять страницу всегда после того, как сервер отправит следующие данные, а не только когда соединение станет закрытым. – jllj
Мое решение выше - кросс-браузер, за исключением того, что вы не тестировали объект XHR браузера должным образом. Я добавлю это и к ответу. –
Ctrl + F5 ваш firefox и попробуйте мой скрипт. Он должен делать именно то, что вам нужно, и быть совместимым с кросс-браузером, если нет, попытайтесь воспроизвести свою проблему в [jsfiddle] (http://jsfiddle.net) или другом живом пейзаже. –