Javascript html和perl,返回脚本文本而不是运行
我一直在编写一个html界面,用于显示表格、饼图、数据等 生成数据和表的Perl脚本可以在终端通过单个命令调用,我希望html中有一个按钮来调用它。一旦Perl脚本运行起来,我真的不需要任何反馈,尽管如果它能回复“一切都比预期的好”,那就太好了 然而目前,每次我点击提交,我都会被要求打开或保存Perl脚本,经过一天的谷歌搜索后,我无法修复它,希望得到一些建议 我对html和js还不熟悉,但到目前为止,我已经做到了:Javascript html和perl,返回脚本文本而不是运行,javascript,html,perl,Javascript,Html,Perl,我一直在编写一个html界面,用于显示表格、饼图、数据等 生成数据和表的Perl脚本可以在终端通过单个命令调用,我希望html中有一个按钮来调用它。一旦Perl脚本运行起来,我真的不需要任何反馈,尽管如果它能回复“一切都比预期的好”,那就太好了 然而目前,每次我点击提交,我都会被要求打开或保存Perl脚本,经过一天的谷歌搜索后,我无法修复它,希望得到一些建议 我对html和js还不熟悉,但到目前为止,我已经做到了: 选择输入文件:(必须是fasta格式) 装箱: 爆破 Blastx 梅根
选择输入文件:(必须是fasta格式)
装箱:
爆破
Blastx
梅根
它只在本地运行,我不想让外部世界访问它,因此我避免使用CGI和Apache风格的解决方案,我认为这是不必要的。链接都很好,因为它每次都试图打开文件
注意:输入目前不相关,因为我当前尝试调用的perl脚本只是一个“Hello World!”为了在托管HTML页面的机器上发生一些事情,您需要有某种进程,在端口80上查找对该机器的请求。在所有情况下,这都是某种“web服务器”,因为端口80是标准的“web”端口 您可以编写自己的简单服务器来侦听请求并运行脚本,但我建议使用现有的服务器,该服务器重量轻且易于设置
另一种选择是在不同的端口执行相同的操作(有一个侦听器)。为了在承载HTML页面的机器上发生某些事情,您需要有某种类型的进程来查找端口80上对该机器的请求。在所有情况下,这都是某种“web服务器”,因为端口80是标准的“web”端口 您可以编写自己的简单服务器来侦听请求并运行脚本,但我建议使用现有的服务器,该服务器重量轻且易于设置
另一个选择是做同样的事情(有一个监听器),但在不同的端口。对于您正在做的事情,不幸的是您需要使用web服务器 在您的例子中,当您在本地打开HTML文件时,当您单击表单时,浏览器会根据您的网页所在的位置查看操作并转到该“地址”,因为您是本地的,所以您的网页是一个文件://url,所以它基本上转到您的perl文件(这是您想要的)除了浏览器本身只是从文件系统请求文件,而不知道如何处理它之外,文件系统并不运行perl脚本,它只是为文件提供服务。所以,唯一可能的回应是让你下载它 在web服务的上下文中,当您告诉服务器“转到此perl文件”并假设web服务器已正确配置时,web服务器会注意到.pl是一个特殊文件,它必须运行它,它会这样做,然后获取其输出并将其发送到浏览器。这就是你想要做的
希望这有帮助。对于您正在做的事情,不幸的是您需要使用web服务器 在您的例子中,当您在本地打开HTML文件时,当您单击表单时,浏览器会根据您的网页所在的位置查看操作并转到该“地址”,因为您是本地的,所以您的网页是一个文件://url,所以它基本上转到您的perl文件(这是您想要的)除了浏览器本身只是从文件系统请求文件,而不知道如何处理它之外,文件系统并不运行perl脚本,它只是为文件提供服务。所以,唯一可能的回应是让你下载它 在web服务的上下文中,当您告诉服务器“转到此perl文件”并假设web服务器已正确配置时,web服务器会注意到.pl是一个特殊文件,它必须运行它,它会这样做,然后获取其输出并将其发送到浏览器。这就是你想要做的
希望这有帮助。正如其他人提到的,您需要某种服务器来充当浏览器和perl之间的粘合剂。我编写的模块()可以在为您编写所有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
标记的需要)。我希望在一个月内发布此更新(只要我能在不崩溃的情况下让新的异步继续通过服务器重写正常工作:)正如其他人所提到的,您需要某种服务器来充当浏览器和perl之间的粘合剂。我编写的模块()可以在为您编写所有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
标记的需要)。我希望在一个月内发布此更新(只要我能在不崩溃的情况下让新的异步继续通过服务器重写正常工作:)当您说“本地运行”时,你的意思是,点击链接的人正在他们的计算机上运行脚本-服务器没有运行脚本?你在使用某种Web服务器吗?即使是简单的