Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX在HTML中调用Perl函数_Javascript_Html_Ajax_Perl - Fatal编程技术网

Javascript 使用AJAX在HTML中调用Perl函数

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(){ //

我遇到了挫折,我用javascript制作了一个Html页面,我用AJAX调用Perl函数。问题是,当我的Perl程序不需要参数时,调用很简单。但是我有一个打开和读取文件的函数,所以我需要给perl脚本提供文件的位置,因此必须通过AJAX调用中的参数传递它。 离职电话:

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";