在基于另一个选择框的选择框中填充数据库中的值

时间:2018-02-08 10:17:50

标签: perl cgi cgi.pm

我想在一个选择框中填充数据库中的值,即ostype到其他选择框(host_name)。应从数据库中填充host_name中的值。我已经为此编写了ajax代码,以便我不必刷新以填充值。我知道这段代码不完整,但我仍然坚持这段代码。怎么办呢?

这是cgi代码:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use FindBin qw($Bin);
use logic;
my @host;
my $i=0;


my $q = CGI->new();
my $ostype=$q->param("ostype");

my $sth=logic->fetchos($ostype);
while(my @row = $sth->fetchrow()){
         $host[$i]=$row[0];
         $i++;
        }

my $JSCRIPT=<<EOF;
function call()
{
var x = document.getElementbyID("ostype").value;
if (x)
$.ajax({
type:"GET",
url:"cgi-bin/logic.cgi",
contentType: "application/json; charset=utf-8",
dataType: "json",
data:"ostype="+x,
});
}
}
EOF
;
print $q->header,
$q->start_html
(
        -title=>'Record Inserted',
),

$q->center($q->h1('Requested Input')), $q->br,"\n",


$q->start_form
(
        -method=>'post',
        -action=>'inputcgi.cgi',
 ), "\n",

 "Operating system",

       $q->scrolling_list(-name=>'ostype',
-size=>3,
-id=>'ostype',
-values=>['RHEL','Windows','Linux'],
-defaults=>['Select OS'],
-multiple=>'true',
-onClick=>"call()"),$q->br,"\n",

"Host name",

$q->scrolling_list(-name=>'host_name',
-size=>3,
-values=>[@host],
-defaults=>['Select servers'],
-multiple=>'true'),$q->br,"\n",

$q->submit(-value=>'Submit');
$q->end_form,
$q->end_html;

逻辑perl模块

sub new{
        $class=shift;
        $self={
                _host_name=>'',
        };
        bless $self,$class;
        return $self;
}

sub fetchos{
my($self,$host_name)=@_;

my $sth=$dbh->prepare("select DISTINCT host_name from HOST_LIST where os='$os' ");

$sth->execute() or die "$DBI::errstr";
return $sth;
}

logic.cgi

#!usr/bin/perl
use CGI;
use logic;
use CGI::Carp qw(fatalsToBrowser);
use FindBin qw($Bin);

print"hello";

perl模块正在工作,因为我填充了selectbox中的所有值,但它不适用于特定的ostype值。

1 个答案:

答案 0 :(得分:0)

这仍然不是CGI脚本 - 它缺少极其重要的HTTP标题部分。在命令行上运行您的脚本或将浏览器指向它并将结果与​​其他脚本进行比较以查看差异。

#!usr/bin/perl
use CGI;
use logic;
use CGI::Carp qw(fatalsToBrowser);
use FindBin qw($Bin);

print"hello";

只需添加一个print $q->header();,就像在原始脚本中一样。由于您的AJAX期望结果是JSON而不是HTML,因此您还需要指定结果的格式。

#!usr/bin/perl
use CGI;
use logic;
use CGI::Carp qw(fatalsToBrowser);
use FindBin qw($Bin);

my $q = CGI->new();
print $q->header('application/json');
print "[\"hello\"]";

我也冒昧地将您的内容更改为有效的JSON