Аякс отправьте запрос
У меня есть клиентский скрипт js/ajax, такой:
<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>
И a на стороне сервера:
<?php
echo 6;
for ($i=0; $i<10; $i++) {
echo $i;
ob_flush(); flush();
sleep(1);
}
?>
После первого "open" и "send" он работает нормально, но когда сервер заканчивает сценарий и xmlhttp.readyState == 4
затем xmlhttp повторно отправляет запрос, но ничего не происходит.
1 ответ:
Вместо того чтобы постоянно использовать один и тот же объект XHR, попробуйте повторить функцию с новым объектом. Это должно, по крайней мере, устранить проблемы несовместимости, как вы указали.
Попробуйте повторно вызвать свою функцию Ajax внутри обратного вызова, если вы хотите бесконечно петлять.
if (xmlhttp.readyState==4) { updateAjax(); //or setTimeout("updateAjax();",100); if you want a delay }
Я бы также предложил поместить ваш метод
.innerHTML
внутрь.readyState==4
, то есть, когда запрошенный документ полностью загружен, и.status==200
что означает успех. Нравится это:if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("stime").innerHTML= xmlhttp.responseText; updateAjax(); //or setTimeout("updateAjax();",100); }
Кроме того, если вы хотите, чтобы ваш Ajax был кроссбраузерным, вы должны проверить, поддерживает ли браузер объект XHR , который вы используете:
var xmlhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
Я только что набрал код выше, но он должен работать просто отлично, чтобы добавить совместимость с более старыми версиями IE и других браузеров.