ajax持续链接,ajax长链接的实现

今天一同学请帮忙,要求实现用户上传文件后,交给服务端调用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_limit(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:Ajax ajax AJAX

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值