我已經浪費了我的公司至少半天的時間在互聯網上尋找答案,我正在這裏纏繞軸。我無法弄清所有不同的技術選擇(長輪詢,ajax流媒體,彗星,XMPP等)之間的差異,我無法獲得在我的PC上工作的簡單的Hello World例子。如何發送網頁瀏覽器的加載頁面,然後一段時間後結果頁面
我正在運行Apache 2.2和ActivePerl 5.10.0。這個解決方案完全可以接受JavaScript。我所要做的就是編寫一個簡單的Perl CGI腳本,當它被訪問時,它立即返回一些HTML,告訴用戶等待或者發送一個GIF動畫。然後,在沒有任何用戶干預的情況下(沒有鼠標點擊或任何東西),我希望CGI腳本稍後用他們的查詢中的實際結果替換等待消息或動畫GIF。
我知道這是簡單的東西,網站一直都在使用JavaScript,但我找不到一個可以剪切並粘貼到我的機器上的工作示例,該機器將在Perl中工作。
這是我從各種互聯網來源編譯的簡單的Hello World示例,但它似乎不起作用。當我在我的網絡瀏覽器中刷新這個Perl CGI腳本時,它不打印5秒,然後打印PLEASE BE PATIENT網頁,但不打印結果網頁。所以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";
好的,工作。感謝您的解決方案!如果沒有人用Ajax解決方案回答,我將使用此解決方案。好處是隻刷新網頁的結果部分,而無需發送和刷新瀏覽器上的整個網頁。 – 2010-04-05 22:29:48
元重定向解決方案的另一個缺點是它在網絡瀏覽器中混淆了查詢字符串的URL,我相信在更新網頁部分時,Ajax解決方案實際上不會更改URL。 – 2010-04-05 22:39:38
我使用jQuery添加了一個Ajax示例。 – friedo 2010-04-06 00:18:49