2012-06-03 2 views
2

을 재전송 : 서버 측아약스 나는이 같은 클라이언트 측 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 요청을 다시 보내지만 아무 일도 발생하지 않습니다.

답변

1

항상 동일한 XHR 개체를 다시 사용하는 대신 새 개체로 기능을 반복 해보십시오. 적어도 나열된 비 호환성 문제를 해결해야합니다.

Ajax 함수를 무한 루프시킬 경우 콜백 내부에서 Ajax 함수를 다시 호출 해보십시오.

if (xmlhttp.readyState==4) { 
    updateAjax(); //or setTimeout("updateAjax();",100); if you want a delay 
} 

또한 성공을 의미하는 요청 된 문서가 완전히로드 된 경우입니다 .readyState==4, 및 .status==200 내부에 .innerHTML 방법을 넣는 게 좋을 것. 난 그냥 코드를 입력

var xmlhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 

:이처럼 : 당신이 당신의 아약스 크로스 브라우저를 수 있도록하려면 브라우저가 사용중인되는 XHR object을 지원하는 경우도

if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("stime").innerHTML= 
     xmlhttp.responseText; 
     updateAjax(); //or setTimeout("updateAjax();",100); 
} 

는, 당신은 테스트해야 하지만 이전 버전의 IE 및 다른 브라우저와의 호환성을 추가하는 데는 잘 작동해야합니다.

+0

나는 그것이 Iceweasel에서 작동한다는 것을 알아 냈습니다. 파이어 폭스 캐싱 때문에 제대로 작동하지 않는다고 생각합니다. 'if'블록에서 innerHTML을 수정하면 스크립트의 동작이 변경되어 연결이 닫힐 때뿐만 아니라 서버가 다음 데이터를 전송 한 후 항상 페이지를 업데이트해야합니다. – jllj

+0

위의 내 솔루션은 브라우저의 XHR 개체를 제대로 테스트하지 않았다는 점을 제외하고는 교차 브라우저입니다. 나는 대답에 그것을 덧붙일 것이다. –

+0

Ctrl + F5를 눌러 파이어 폭스를 만들고 스크립트에 시도해보십시오. 그것은 당신이 원하는 것과 브라우저 간 호환이 가능해야합니다. 그렇지 않다면 [jsfiddle] (http://jsfiddle.net) 또는 다른 라이브 풍경에서 문제를 재현 해보십시오. –

관련 문제