【发布时间】:2011-02-04 14:23:40
【问题描述】:
我已经浪费了我公司至少半天的时间在 Internet 上搜索答案,而我正忙得不可开交。我无法弄清楚所有不同技术选择(长轮询、ajax 流、comet、XMPP 等)之间的区别,也无法在我的 PC 上运行一个简单的 hello world 示例。
我正在运行 Apache 2.2 和 ActivePerl 5.10.0。对于这个解决方案,JavaScript 是完全可以接受的。我要做的就是编写一个简单的 Perl CGI 脚本,当访问它时,它会立即返回一些 HTML,告诉用户等待或者发送一个动画 GIF。然后,无需任何用户干预(无需单击鼠标或任何操作),我希望 CGI 脚本稍后将等待消息或动画 GIF 替换为其查询的实际结果。
我知道这很简单,网站一直使用 JavaScript 来做这件事,但是我找不到一个可以剪切并粘贴到我的机器上的可以在 Perl 中运行的工作示例。
这是我从各种 Internet 资源编译的简单 Hello World 示例,但它似乎不起作用。当我在我的网络浏览器中刷新这个 Perl CGI 脚本时,它会在 5 秒内不打印任何内容,然后它会打印请耐心等待网页,而不是结果网页。所以 Ajax XMLHttpRequest 的东西显然不能正常工作。我做错了什么?
#!C:\Perl\bin\perl.exe
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
sub Create_HTML {
my $html = <<EOHTML;
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<script type="text/javascript" >
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp=false;
}
}
if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
} catch (e) {
xmlhttp=false;
}
}
</script>
<title>Ajax Streaming Connection Demo</title>
</head>
<body>
Some header text.
<p>
<div id="response">PLEASE BE PATIENT</div>
<p>
Some footer text.
</body>
</html>
EOHTML
return $html;
}
my $cgi = new CGI;
print $cgi->header;
print Create_HTML();
sleep(5);
print "<script type=\"text/javascript\">\n";
print "\$('response').innerHTML = 'Here are your results!';\n";
print "</script>\n";
【问题讨论】:
标签: javascript ajax perl streaming cgi