ajax长链接的实现

来源:java认证发布时间:2012-11-12 12:48:01java认证视频

今天一同学请帮忙,要求实现用户上传文件后,交给服务端调用shell处理,处理分好几步,而且处理时间可能长达数分钟,并要将每一部处理反馈给用户,让用户知道当前进行到哪一步。
 
一种的方法是每隔很短的时间发送一个ajax请求,检测运算到哪一步,通过检测ajax返回来处理。
这样的好处是实现起来简单,但对客户端和服务端压力都比较大。
 
还有一种方法,就是发送一个ajax请求,一直处于等待状态,直到服务端有数据时再返回,这样可以显著降低请求数目,减少服务端压力。
  
js:
 
Js代码    
1. var step = 1,  
2.  
3. getProgress = function(){  
4.     $.ajax({  
5.         type:"POST",  
6.         url:'getdata.php',  
7.         dataType:'text',  
8.         data:{step:step},  
9.         timeout:10*60*1000,  //设置10分钟超时  
10.         success:function(data){  
11.             data = (new Function("return "+data))();  
12.             if(data.step == 1){       
13.                 console.log("step 1 complete");  
14.                 step++;  
15.                 getProgress();  
16.  
17.             } else if(data.step == 2){  
18.                 console.log("step 2 complete");  
19.                 step++;  
20.                 getProgress();  
21.             } else if(data.step == 3){  
22.                 console.log("all complete!");  
23.             } else if(data == "error"){ //如果出错,则重试   
24.                 getProgress();  
25.             }  
26.         },  
27.         error:function(){  
28.             alert("运算超时");    
29.         }  
30.     });  
31. };  
 
php:
 
Php代码    
1. if(!emptyempty($_POST['step'])){  
2.     $step = $_POST['step'];  
3.     set_time_pmit(0);  //这里是关键,设置链接永不过时  
4.     if($step == 1){           //每一步由不同的shell处理,php会等shell执行完毕再继续执行  
5.         $sh = "./test1.sh";  
6.     } else if($step == 2){  
7.         $sh = "./test2.sh";  
8.     } else if($step == 3){  
9.         $sh = "./test3.sh";  
10.     }  
11.  
12.     $ret = exec($sh,$results,$rc);  
13.     if($rc == 0){  
14.         echo "{step:".$step."}";  
15.     } else {  
16.         echo "error";  
17.     }  
18.  
19. } 

TAG: AjaxajaxAJAX

 -5-3-1-+1+3+5

评分:0

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答