을 재전송 : 서버 측아약스 나는이 같은 클라이언트 측 JS/아약스 스크립트를 가지고 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에서 작동한다는 것을 알아 냈습니다. 파이어 폭스 캐싱 때문에 제대로 작동하지 않는다고 생각합니다. 'if'블록에서 innerHTML을 수정하면 스크립트의 동작이 변경되어 연결이 닫힐 때뿐만 아니라 서버가 다음 데이터를 전송 한 후 항상 페이지를 업데이트해야합니다. – jllj
위의 내 솔루션은 브라우저의 XHR 개체를 제대로 테스트하지 않았다는 점을 제외하고는 교차 브라우저입니다. 나는 대답에 그것을 덧붙일 것이다. –
Ctrl + F5를 눌러 파이어 폭스를 만들고 스크립트에 시도해보십시오. 그것은 당신이 원하는 것과 브라우저 간 호환이 가능해야합니다. 그렇지 않다면 [jsfiddle] (http://jsfiddle.net) 또는 다른 라이브 풍경에서 문제를 재현 해보십시오. –