Javascript 使用AJAX在HTML中调用Perl函数
我遇到了挫折,我用javascript制作了一个Html页面,我用AJAX调用Perl函数。问题是,当我的Perl程序不需要参数时,调用很简单。但是我有一个打开和读取文件的函数,所以我需要给perl脚本提供文件的位置,因此必须通过AJAX调用中的参数传递它。 离职电话:Javascript 使用AJAX在HTML中调用Perl函数,javascript,html,ajax,perl,Javascript,Html,Ajax,Perl,我遇到了挫折,我用javascript制作了一个Html页面,我用AJAX调用Perl函数。问题是,当我的Perl程序不需要参数时,调用很简单。但是我有一个打开和读取文件的函数,所以我需要给perl脚本提供文件的位置,因此必须通过AJAX调用中的参数传递它。 离职电话: function getOption(){ var selectmenu=document.getElementById("Select1") selectmenu.onchange=function(){ //
function getOption(){
var selectmenu=document.getElementById("Select1")
selectmenu.onchange=function(){ //run some code when "onchange" event fires
var chosenoption=this.options[this.selectedIndex] //this refers to "selectmenu"
if (chosenoption.value!="nothing"){
var s = chosenoption.text;
openFile("C:\PerlTest\test.txt");
}
}
}
例如,尝试传递参数时不工作:
function openFile(name){
XMLHttp.open("GET", "/cgi-bin/readFile.pl"+name, true);
XMLHttp.onreadystatechange = function() {
if (XMLHttp.readyState == 4) {
document.getElementById("TxtArea").innerHTML = XMLHttp.responseText;
}
}
XMLHttp.send(null);
}
由于以下示例,我试图以这种方式通过参数表:
有人能帮忙吗
非常感谢
在基诺皮科的建议之后,这是有意义的,我有以下几点: HTML-
函数openFile(名称){
XMLHttp.open(“GET”,”/cgi-bin/readFile.pl?file=“+encodeURI(name),true);
XMLHttp.onreadystatechange=函数(){
if(XMLHttp.readyState==4){
var container=XMLHttp.responseText.split(“\n”);
如果(容器长度>0){
对于(i=0;i
Perl脚本:
#!c:/Perl/bin/perl
use strict;
use CGI qw/param/;
use URI::Escape;
print "Content-type: text/html\n\n";
my $file = param ('file');
$file = uri_unescape ($file);
open (MYFILE, $file);
while (<MYFILE>) {
chomp;
print "$_\n";
}
close (MYFILE);
#!c:/Perl/bin/Perl
严格使用;
使用CGI qw/param/;
使用URI::Escape;
打印“内容类型:text/html\n\n”;
my$file=param('file');
$file=uri_unescape($file);
打开(MYFILE,$file);
而(){
咀嚼;
打印“$\u\n”;
}
关闭(MYFILE);
现在我在javascript中没有得到错误,但是我的XMLHttp.readyState从来都不是4,所以我没有得到文件的内容
也许我用错了编码URI
谢谢。首先,您需要添加一个问号:
XMLHttp.open("GET", "/cgi-bin/readFile.pl?file="+name, true);
您还需要使用encodeURI
对“name”进行百分比编码
在Perl端,您可以使用类似CGI的模块来获取文件的值:
use CGI qw/param/;
my $file = param ('file');
然后
应该是
open (MYFILE, $file) or die "Cannot open file $file: $!\n";
为什么不使用jQuery?如果需要,我可以提供一些示例。或者prototype.js。或者道场。。。有很多JavaScriptsLibrary,不仅仅是jQuery。它们都可以使编写变得更容易。有些参数仍然无法传递。perl脚本不执行。如果我将路径硬编码到perl脚本中,我会得到我想要的结果。“encodeURIComponent”,而不是encodeURI。我接受了,因为你的回答纠正了我的代码,事实上我使用斜杠是错误的,这是我的错。
use URI::Escape;
$file = uri_unescape ($file);
open (MYFILE, $file);
open (MYFILE, $file) or die "Cannot open file $file: $!\n";