0

可能重复:
注册:Perl CGI 脚本自动更新新数据

perl CGI 脚本不断更新时间,而不是创建时间列表

#!C:/perl/bin/perl.exe
use warnings;
use strict;
use CGI;

local $| = 1;

my $cgi = new CGI;
my $string = localtime();
print $cgi->header();
print $cgi->start_html("Welcome");
print $cgi->h1("$string");
print $cgi->end_html();

print $cgi->header();
print $cgi->start_html("Welcome");
print $cgi->h1("$string");
print $cgi->end_html();
4

3 回答 3

2

切换到 PSGI。

my $app = sub {
    my $env = shift;
    return sub {
        my $respond = shift;
        my $writer = $respond->([200, ['Content-Type', 'multipart/x-mixed-replace; boundary=time']]);
        while (1) {
            $writer->write(
                "--time\n" .
                "Content-Type: text/plain\n\n" .
                localtime . "\n"
            );
            sleep 1;
        }

        # will never arrive here, but
        # install a signal handler and call this for cleanup
        $writer->close;
    };
};
于 2012-05-15T22:03:55.090 回答
2

您的问题揭示了对事物如何运作的根本误解。

事件的顺序是:

  1. Web 服务器被配置为在请求特定 URL 时运行特定程序。
  2. 浏览器发出请求资源的 HTTP 请求。
  3. 服务器运行程序,捕获其标准输出流,并将其发送回浏览器。
  4. 浏览器显示内容。

请求/响应周期完成后,事务结束。服务器不知道它发送的内容到底去了哪里,无论是显示在窗口中还是转换为 ASCII 艺术。它发送内容并完成它(TCP keep-alives 等不会改变这个模型)。

因此,“在同一浏览器中不断刷新当前时间而不是打印时间列表的 CGI 脚本”语句毫无意义:服务器无法收回它已经发送的输出。

使用 JavaScript 和 XHR,您可以使用 CGI 脚本的输出更新页面上某个元素的内容

然而,现在另一个您似乎没有注意到的基本问题出现了:您所说的当前时间是什么意思?

于 2012-05-15T16:23:05.303 回答
1

也许您想在输出中提供META Refresh标头,以便页面每秒自动刷新。但实际上我建议为此使用 Javascript。

于 2012-05-15T13:22:57.490 回答