我想从一个选择框中填充数据库中的值,即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";
当我填充Selectbox中的所有值时,Perl模块正在工作,但它不适用于Ostype的特定值。
这仍然不是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