1

注意:那些拒绝投票的人(因为问题使用 PERL CGI 标签),请继续,但请给我一些提示或答案。

你好,

在测试的基础上,我正在使用 Perl CGI::Ajax 制作网页。
它有以下代码

<input id="q" type="text" size="15" name="query" value="" /></br>        
<input type="submit" value="Find" onclick="exported_func( ['q'], ['content'] );">

因此,当用户在文本框中输入一些值并单击时,一个 perl ajax 函数会进入 Ms-access 数据库并返回类似于查询文本的记录。
在尝试了无数次之后,我想问:
1.如何将数据库记录直接打印到内容div。
2.如果没有,我如何收集数组中的数据库记录并打印在内容中。

my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func );
print $pjx->build_html( $cgi, \&Show_HTML);

sub perl_func 
{
#my $input = shift; # doing database action thereafter
my @vararray = qw(abcd); # how do I store query returned database records
push @vararray,'s'; # this is demo code for testing array method, which failed.
return @vararray;
#my table = document.getElementById("content"); # is this kind of thing possible
#table.innerText = "Hello"; 
}

以上是我的试用代码,用于数组方法,但推送失败。使用上面的代码,内容 div 只显示 abcd 而没有 s。

4

1 回答 1

2

onclick="exported_func( ['q'], ['content'] );只指定一个输出 div,因此从 Perl 代码返回的第一个值(“abcd”)放置在该 div 中,并且任何附加值(“s”)都被丢弃。如果要显示多个返回值,基本上有 3 个选项:

1)指定多个输出div。例如,onclick="exported_func( ['q'], ['content1', 'content2', 'content3'] ); 注意这个选项,虽然是最简单的,但如果返回的值比输出 div 多,仍然会丢失数据,所以最好只在 Perl 返回固定数量的数据值时使用它。

2)编写一个javascript函数,接收所有返回值并将它们放在页面上的适当位置,可能首先组合/格式化它们。例如,onclick="exported_func( ['q'], [js_display_function] );在页面的其他地方,function js_display_function() { ... }

3) 在返回之前,将所有返回值组合成 Perl 代码中的单个 HTML 字符串。例如,return '<ul>' . join("\n", map { "<li>$_</li>" } @vararray) . '</ul>';

于 2013-05-28T09:49:00.393 回答