Аякс отправьте запрос
У меня есть клиентский скрипт 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 и других браузеров.