【问题标题】:Updating html using ajax & perl使用 ajax 和 perl 更新 html
【发布时间】:2014-11-06 00:46:34
【问题描述】:

我正在尝试使用 ajax 和 perl 更新我网页上的 div。这就是我目前所拥有的,并且很有效。

html

<h2 id="cpu">--</h2>

js/ajax 调用

   $.ajax({
      type: 'GET',
      url: '/cgi-bin/cpu.pl',
      async: true,
      success: function(data) {
        $('#cpu').html(data);
      } 
    });

perl

#!/usr/bin/perl

# Ref: Calculating CPU Usage from /proc/stat
# (http://colby.id.au/node/39)

use strict;
use warnings 'all';
use utf8;

use List::Util qw(sum);

$| = 1;

my ( $prev_idle, $prev_total ) = qw(0 0);
while () {
    open( STAT, '/proc/stat' ) or die "WTF: $!";
    while (<STAT>) {
        next unless m{^cpu\s+[0-9]+};
        my @cpu = split ' ', $_;
        shift @cpu;

        my $idle  = $cpu[3];
        my $total = sum(@cpu);

        my $diff_idle  = $idle - $prev_idle;
        my $diff_total = $total - $prev_total;
        my $diff_usage = 100 * ( $diff_total - $diff_idle ) / $diff_total;

        $prev_idle  = $idle;
        $prev_total = $total;

        print "Content-type: text/html \n\n";
        printf "%0.2f%%  \r", $diff_usage;
    }
    close STAT;
}

这部分有效,因为它确实用百分比更新了 h2,但只更新了一次。我确实有它,它在循环内说sleep 1;,并且从命令行执行它效果很好但是当我将它与ajax一起使用并查看网络时,对于cpu.pl它总是说状态挂起并且它从未改变.

我不确定我是否会以正确的方式解决这个问题。所以任何帮助都会很棒,谢谢。

【问题讨论】:

  • 看来你对ajax的工作方式有误解,一旦收到任何数据就不是开放连接
  • 对于持续更新(如stackoverflow,例如投票),您需要使用websockets,或者您需要通过ajax 定期询问服务器,或阅读http-server-push(分块传输)。 ...
  • 你应该切换到meteor.js (meteor.com) 它可以立即更新html而不需要刷新,并且不需要学习一门新的语言,它使用JavaScript! (这是你想要的吗?)

标签: javascript jquery html ajax perl


【解决方案1】:

看来我想错了 ajax。感谢charlietfl 的澄清。我仍然不确定我想如何去做。我最初是在寻找一个快速而肮脏的解决方案,但我将研究jm666Ian Wise 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2014-10-10
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多