我一直在编写一个用于显示表格,饼图,数据等的html界面。
生成数据和表的Perl脚本可以通过终端上的单个命令调用,我希望在html中有一个按钮来调用它。我不会真的需要来自Perl脚本的任何反馈,尽管如果它可以ping回“一切都比预期更好”,那就太好了。
目前,每次点击提交时,我都会被要求打开或保存Perl脚本,经过一天的谷歌搜索,我无法解决它,并希望得到一些建议。
我是html和js的新手,但这是我到目前为止所做的:
<form action="scripts/do_processing.pl" method="get">
<table>
<td>Select input file: (must be fasta format)</td>
<td>
<input type="file" name="first_name" value="" maxlength="100" />
</td>
</tr>
<br>
<tr>
<tr><td>Binning:</td>
<td>
<input type="radio" name="bin_method" value="blastn" /> Blastn
<input type="radio" name="bin_method" value="blastx" /> Blastx
<input type="radio" name="bin_method" value="megan" /> Megan
</td>
</tr>
</table>
<br><br>
<input TYPE=IMAGE
SRC="images/go_button-green.jpg"
HEIGHT=100 WIDTH=auto
ALT="Go!" BORDER=0
NAME="go"
>
</td>
</tr>
</form><br>
只是在本地运行,我无意让外部世界可以访问它,因此我避免使用我认为不必要的CGI和Apache-esque解决方案。链接都很好,因为它每次都试图打开文件。
注意:此时输入不相关,因为我正在尝试调用的perl脚本只是一个“Hello World!”
答案 0 :(得分:4)
对于您正在做的事情,您不幸地需要使用Web服务器。
在您的情况下,当您在本地打开HTML文件时,当您单击表单时,浏览器会查看操作并根据您的网页的位置转到该“地址”,因为您是本地的,您的网页是一个文件:// url,所以它基本上是你的perl文件(这是你想要的),除了浏览器本身只是从你的文件系统请求文件,不知道如何处理它,文件系统不运行你的perl脚本,它只是提供文件。因此,只有可靠的回复才能让您下载它。
在Web服务的上下文中,当您告诉服务器“转到此perl文件”并假设Web服务器配置正确时,Web服务器会注意到.pl是一个特殊文件,它必须运行它,它确实如此,然后抓取它的输出并将其发送到您的浏览器。这是你想要做的。
希望这有帮助。
答案 1 :(得分:1)
为了在托管HTML页面的机器上发生某些事情,您需要有一些进程在端口80上查找到该机器的请求。在所有情况下,这将是某种“网络服务器”,因为端口80是标准的“网络”端口。
您可以编写自己的简单服务器来侦听请求并运行脚本,但我建议使用现有的轻量级且易于设置的服务器。
另一个选择是做同样的事情(有一个监听器)但是在不同的端口。
答案 2 :(得分:1)
正如其他人所提到的,你需要某种服务器作为浏览器和perl之间的粘合剂。我编写的模块(Web::Gui)可以在为您编写所有HTML和JavaScript时充当粘合剂:
use Web::Gui;
display(
TABLE(
TR(
TD('Select input file: (must be fasta format)'),
TD(INPUT type=>"file", id=>"first_name", maxlength=>100)
),
TR(
TD('Binning:'),
TD(map BinMethod($_), qw(Blastn Blastx Megan)),
),
TR(TD(colspan => 2,
INPUT(type=>'button', value=>'Go', onclick=>sub {
print "running app\n";
print "file: ", ID(first_name)->value, $/;
my $radios = gui('document')->getElementsByName('bin_method');
my @values = map {$_->value} grep {$_->checked} @$radios;
print "bin: @values\n";
})
))
)
);
sub BinMethod {
INPUT(type=>"radio", name=>"bin_method", value=>lc $_[0]),
SPAN($_[0])
}
Web::Gui
并不完美(也没有完成),但它可能非常适合您的问题。 XUL::Gui
(其中Web::Gui
是其中一部分)的重大更新即将发布。它将通过jQuery支持,jQueryUI和一些改进的语法来增强Web::Gui
(除了上述示例之外不需要SPAN
标记)。我希望在这个月内发布这个更新(一旦我可以让我的新异步延续传递服务器重写工作而不会崩溃:)