비슷한 주제에 대해 살펴 보았지만 현재 어떤 문제도 해결하지 못했습니다. 나는 이것을 가지고있다 :AJAX에서 PHP 스크립트 루프를 요청합니다.
<script type="text/javascript">
http = new XMLHttpRequest();
function fetch()
{
http.open("GET", "script.php", true);
http.onreadystatechange = useHttpResponse;
http.send(null);
}
function useHttpResponse()
{
if(http.readyState == 4)
{
var textout = http.responseText;
document.getElementById("ajax").innerHTML=textout;
}
}
</script>
매우 기본적인 것들. PHP 스크립트는 간단한 루프입니다.
for($i = 0; $i < 30000; $i++)
{
echo 'Hello<br />';
}
위대한 작품입니다. 나는 onClick="javascript:fetch()"
이있는 버튼을 누르고 PHP 스크립트를 요청하고 id "ajax"인 div에 30.000 줄의 "Hello"를 출력합니다.
문제는 30.000 루프가 모두 실행될 때까지 기다려야한다는 것입니다. 각 루프 후에 AJAX 요청을 통해 응답을 출력하여 스크립트가 실행되는 동안 목록 종류가 확장되도록하고 싶습니다. 이것이 가능한가? 어떻게하면 좋을까요? 내가 말했듯이, 나는 수색했지만 비어있는 것처럼 보인다. 나는 이것이 엄밀히 말하면 미용 효과가 있다는 것을 알고 있지만, 어떤 충고에 대해서도 큰 도움이 될 것입니다!
는 PHP 설정에서 당신에게
그럴 수 없습니다. 'http.readystate'가 '4'이면 데이터 전송이 완료된 것입니다. – Mike
또한 gzip 압축이 활성화 된 경우 flush()를 호출해도 아무런 효과가 없다는 것을 언급해야합니다. – Mike
이것은 놀라운 일을했습니다! 전에 플러시 메서드를 시도했지만 스크립트가 모든 루프를 완료 할 때까지 아무 일도 일어나지 않았습니다. 상태가 4가 아닌 3으로 설정되면 이제 각 루프의 모든 내용이 출력됩니다. 분명히 for-loop만으로는 전송 된 모든 업데이트로 인해 브라우저가 멈추었지만 인쇄 할 줄은 적지 만 실행에 더 많은 시간이 소요되는 응용 프로그램 스크립트에서는 작동합니다. 빠른 답장을 보내 주셔서 감사합니다! – Tanax