免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3922 | 回复: 13

perl cgi 异步输出 [复制链接]

论坛徽章:
0
发表于 2012-11-09 13:23 |显示全部楼层
本帖最后由 mfkwwgi 于 2012-11-09 14:13 编辑

各位,我在使用perl 做cgi的时候,遇到一个异步输出的问题。我的目的是,要输出一个变量的结果到页面,但这个变量的结果需要一段很长的时间才能取回,但是,又不想让页面一直空白。所以,我想做个异步输出,在后台处理的时候,写输入一个waiting的面提示,等后台处理完毕,才将waiting替换成正常的输出。在网上查了一下,有用fork的方式,但是,输出结果也是很两个进程都结束后才输出到页面,尽管使用了$|也是一样。查了一下perldoc有个CGI::AJAX;由于当前页面get获取前一页面的数据丢失异常,所以没有做出效果,请教有没有其它的方法?谢谢

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2012-11-09 14:09 |显示全部楼层
简单吧。
先输出一个元素,<div id='output'> waiting</div>
do your work
然后输出一段js
修改div output的值就ok了

或者用进度条的方案

论坛徽章:
0
发表于 2012-11-09 14:15 |显示全部楼层
laputa73 发表于 2012-11-09 14:09
简单吧。
先输出一个元素, waiting
do your work


这种方案,试过,这样还是会把整个work都执行完毕,才加上div,在输出整个个页面。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2012-11-09 15:55 |显示全部楼层
回复 3# mfkwwgi
我试过了,没有问题啊。
  1. #!/usr/local/bin/perl
  2. use strict;
  3. use CGI qw(:standard);



  4. select(STDOUT);
  5. $| = 1;

  6. #begin to print Html header;
  7. print '
  8. <html>
  9. <head>
  10. <title>nslookup</title>
  11. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  12. </head>

  13. <body>
  14. <div id="output">waiting</div>
  15. ';

  16. sleep(20);

  17. print '
  18. <SCRIPT LANGUAGE="JavaScript">
  19. document.getElementById("output").innerHTML='ok';
  20. </SCRIPT>
  21. ';

  22.         print '
  23.         </form>
  24.         </body>
  25.         </html>';
  26.         exit(0);
复制代码

论坛徽章:
0
发表于 2012-11-09 21:27 |显示全部楼层
本帖最后由 mfkwwgi 于 2012-11-09 21:30 编辑
laputa73 发表于 2012-11-09 15:55
回复 3# mfkwwgi
我试过了,没有问题啊。



我的环境是linux +apache(cgi),这个代码,我跑了一下,在网面上没有显示出waiting,页面一直是空白等待响应状态,最后显示了ok字符。如下:

QQ截图20121109212342.png

论坛徽章:
0
发表于 2012-11-09 23:00 |显示全部楼层
$|应该就可以了吧?

论坛徽章:
0
发表于 2012-11-10 16:50 |显示全部楼层
本帖最后由 mfkwwgi 于 2012-11-10 16:50 编辑
sjdy521 发表于 2012-11-09 23:00
$|应该就可以了吧?



确实不行,还是前后代码都执行完毕后,一并输出的。
我用IE,chrome都测试过不行。

论坛徽章:
0
发表于 2012-11-10 22:33 |显示全部楼层
回复 7# mfkwwgi
贴你的关键输出代码

   

论坛徽章:
0
发表于 2012-11-11 10:19 |显示全部楼层
  1. #!/usr/local/bin/perl

  2. use strict;

  3. use CGI qw(:standard);




  4. select(STDOUT);

  5. $| = 1;


  6. #begin to print Html header;

  7. print '

  8. <html>

  9. <head>

  10. <title>nslookup</title>

  11. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  12. </head>


  13. <body>

  14. <div id="output">waiting</div>

  15. ';


  16. sleep(20);


  17. print '

  18. <SCRIPT LANGUAGE="JavaScript">

  19. document.getElementById("output").innerHTML='ok';

  20. </SCRIPT>

  21. ';


  22.         print '

  23.         </form>

  24.         </body>

  25.         </html>';

  26.         exit(0);
复制代码
sjdy521 发表于 2012-11-10 22:33
回复 7# mfkwwgi
贴你的关键输出代码


我就用laputa73 兄的代码:

论坛徽章:
0
发表于 2012-11-12 13:28 |显示全部楼层
回复 9# mfkwwgi


    测试无问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP