簡體   English   中英

使用Perl在CGI中進行progessbar

[英]progessbar in cgi using perl

到目前為止,一切正常。 但是問題在於進步者開始發送郵件。

我發現我很難在cgi中實現progressbar的所有示例。

這些文檔對我來說不是很清楚,如何在cgi中完成progressbar。

也許有人可以幫我解決上面的代碼。 因此可以練習並了解progrssbar如何與cgi一起工作。 所以可以在我未來的項目中實施

#!/usr/bin/perl -w

use lib '.';
use strict;
use warnings;
use DBI;
use CGI;
use MIME::Lite;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI();

my $host =   "localhost";
my $usr =    "root";
my $pwd =    "";
my $dbname = "tbl_users";

my $dbh = DBI->connect("DBI:mysql:$dbname:$host", $usr, $pwd, {
                                  AutoCommit => 0,
                                  RaiseError => 1, 
                                  }) or die $DBI::errstr;

my $sub = $q->param("sub");
my $msg = $q->param("msg");
my $success;

if ($sub) {
my $getemails = $dbh->prepare("SELECT DISTINCT EMAIL FROM USERS");
$getemails->execute();
my $dbemails = $getemails->fetchall_arrayref;
my $emails = join ',',map{$_->[0]}@$dbemails;

my $to = '';
my $from = 'noreplay@site.com';
my $subject = $sub;
my $message = "

$msg 

";

my $MSG = MIME::Lite->new(
                 From     => $from,
                 To       => $to,
                 Bcc      => $emails,
                 Subject  => $subject,
                 Data     => $message
                 );

$MSG->send; 
$success = "mail was sent successfully";

}

$dbh->disconnect || die "$DBI::errstr\n";

print "Content-type: text/html\n\n";
print <<START_HTML;

<!DOCTYPE html>
<html>
<head>
<title>Mail Send</title>
<style type="text/css">
    body {
        background-color: white;
        font-family: Verdana;
        font-size: small;
        color: black
    }
    #trough {
        background-color: silver;
        border: 1px solid black;
        height: 24px
    }
    #bar {
        background-color: #669900;
        height: 24px;
        width: 1%
    }
</style>
</head>
<body>

<h1>Mail My DB Customers</h1>

<div id="form" style="display: block; margin: auto; width: 350px">
    <fieldset>
        <legend>Send Mail</legend>

        <form name="mail"  method="post" onSubmit="return sendMail(this)">


        Subject: <input type="text" name="sub" size="20"><br>
        Message: <input type="text" name="msg" size="20"><br>

        <input type="submit" value="Send Mail">
        </form>
    </fieldset>
</div>

<div id="progress" style="margin: auto; width: 350px">
    <fieldset>
        <legend>Sending...</legend>

        <div id="trough"><div id="bar"></div></div>

        Percent: <span id="percent">0</span>%
    </fieldset>
</div>

<span>$success</span>

<div id="debug"></div>

<script type="text/javascript">
    // When the form is submitted.
    function sendMail(frm) {

        // Show the progress indicator.
        document.getElementById("progress").style.display = "block";

        // Wait a bit and make ajax requests.
        setTimeout("getProgress()", 1000);

        return true;
    }

    // Poll for our progress.
    function getProgress() {
        var ajax = new XMLHttpRequest();

        ajax.onreadystatechange = function() {
            if (ajax.readyState == 4) {
                gotProgress(ajax.responseText);
            }
        };

        ajax.open("GET", "upload.pl" + Math.floor(Math.random()*99999), true);
        ajax.send(null);
    }

    // Got an update
    function gotProgress(txt) {


        // Get vars outta it.
        var percent = 0;

        // Was it an error?
        if (stat[0] == "error") {
            document.getElementById("debug").innerHTML += "error: " + stat[1];
            setTimeout("getProgress()", 1000);
            return false;
        }

        // Separate the vars.
        var parts = stat[1].split("&");

        for (var i = 0; i < parts.length; i++) {
            var halves = parts[i].split("=");


            if (halves[0] == "percent") {
                percent = halves[1];
            }

        }

        document.getElementById("debug").innerHTML += "percent:" + percent + "<br>\n";

        // Update the display.
        document.getElementById("bar").style.width = parseInt(percent) + "%";
        document.getElementById("percent").innerHTML = percent;

        // Set another update.
        setTimeout("getProgress()", 1000);
        return true;
    }
</script>

</body>
</html>



START_HTML

您似乎誤解了Ajax的工作原理。 聽起來您的Ajax調用正在重新請求您的主要CGI程序,但這可能無法正常工作。 Ajax調用應該針對一個更簡單的程序,該程序返回一個(通常)JSON響應,其中包含主頁所需的數據。

但是,我在二月份向您提到基本問題仍然存在。 您的電子郵件是通過一次調用MIME::Lite::send() ,因此進度欄沒有任何要報告的內容。 調用之前進度為0%,返回時進度為100%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM