ajax 장 폴 링 의 실현

오늘 한 학생 이 도와 주 십시오. 사용자 가 파일 을 업로드 한 후에 서버 에 셸 처 리 를 호출 하 라 고 요구 합 니 다. 처 리 는 몇 단계 로 나 눌 수 있 고 처리 시간 은 몇 분 에 달 할 수 있 으 며 모든 처 리 를 사용자 에 게 피드백 하여 현재 어느 단계 까지 진행 되 고 있 는 지 알려 야 합 니 다.
 
 
하나의 방법 은 아주 짧 은 시간 마다 ajax 요청 을 보 내 고 연산 이 어느 단계 에 있 는 지 확인 하 며 ajax 검 사 를 통 해 되 돌아 오 는 것 입 니 다.
이러한 장점 은 실현 하기는 간단 하지만 클 라 이언 트 와 서버 에 대한 압력 이 비교적 크다 는 것 이다.
 
 
또 하나의 방법 은 ajax 요청 을 보 내 고 대기 상태 에 있 으 며 서버 에 데이터 가 있 을 때 다시 돌아 오 는 것 입 니 다. 그러면 요청 수 를 현저히 낮 추고 서버 의 압력 을 줄 일 수 있 습 니 다.
 
 
js:
 
		var step = 1,

		getProgress = function(){
			$.ajax({
				type:"POST",
				url:'getdata.php',
				dataType:'text',
				data:{step:step},
				timeout:10*60*1000,  //  10    
				success:function(data){
					data = (new Function("return "+data))();
					if(data.step == 1){		
						console.log("step 1 complete");
						step++;
						getProgress();

					} else if(data.step == 2){
						console.log("step 2 complete");
						step++;
						getProgress();
					} else if(data.step == 3){
						console.log("all complete!");
					} else if(data == "error"){ //    ,    
						getProgress();
					}
				},
				error:function(){
					alert("    ");	
				}
			});
		};
 
 
php:
 
if(!empty($_POST['step'])){
	$step = $_POST['step'];
	set_time_limit(0);  //     ,        
	if($step == 1){           //       shell  ,php  shell         
		$sh = "./test1.sh";
	} else if($step == 2){
		$sh = "./test2.sh";
	} else if($step == 3){
		$sh = "./test3.sh";
	}

	$ret = exec($sh,$results,$rc);
	if($rc == 0){
		echo "{step:".$step."}";
	} else {
		echo "error";
	}

}
 
 

좋은 웹페이지 즐겨찾기