2011-10-03 4 views
4

html을 인쇄하기 전에 결과를 생성하는 데 오랜 시간 (30 초)이 걸리는 CGI 스크립트가 있습니다. 결과를 표시하기 전에 애니메이션 GIF로 '로드 중입니다 ... 기다려주십시오 ...'라는 중간 페이지를 표시하고 싶습니다. 감사합니다.CGI가 실행되는 동안 "대기중인 페이지"를 표시하는 방법은 무엇입니까?

+0

그래서 당신은 자바 스크립트 ('아약스')를 살펴 있어야합니다. – home

+0

당신이하고있는 일을 모두 삭제하고 jQuery (tm)를 사용해야합니다 : – DVK

답변

4

프로세스를 포크하고 세션에 대한 참조를 유지합니다. 그런 다음 주기적으로 상태 업데이트를 위해 스크립트를 폴링합니다.

원래는 Linux Magazine에 게시 된 코드 예제가 more detailed explanation입니다. 펄 몽크는 further discussion입니다.

전체 페이지를 다시로드하는 대신 JavaScript (및 XMLHttpRequest)를 사용하여 폴링을 수행 할 수 있습니다 (단, build on things that work 기억).

+1

+1 non-AJAXy 옵션 – DVK

4

간단한 해결책 : 로딩 텍스트와 gif로 정적 HTML 페이지를 만들고 XHR으로 CGI 스크립트를로드하는 JS 스크립트로 만듭니다. lib는 jQuery이고 ajax 헬퍼 함수는 load과 같이 매우 간단합니다. 도움을

0

고마워, 내가 한 일이 :

<script type="text/javascript"> 
var ray={ 
ajax:function(st) 
    { 
     this.show('load'); 
    }, 
show:function(el) 
    { 
     this.getID(el).style.display=''; 
    }, 
getID:function(el) 
    { 
     return document.getElementById(el); 
    } 
} 
</script> 
<style type="text/css"> 
#load{ 
position:absolute; 
z-index:1; 
border:3px double #999; 
background:#f7f7f7; 
width:300px; 
height:300px; 
margin-top:-150px; 
margin-left:-150px; 
top:50%; 
left:50%; 
text-align:center; 
line-height:300px; 
font-family:"Trebuchet MS", verdana, arial,tahoma; 
font-size:18pt; 
} 
</style> 
<div id="load" style="display:none;">Loading... Please wait<br/><img src="images/loading.gif"></div> 
<form action="http://localhost/cgi-bin/test.cgi" method="get" onsubmit="return ray.ajax()"> 
<input type="text" value="Test" name="q"> 
<input type="submit" value="Search"> 
</form> 
관련 문제