【问题标题】:Call Perl function in HTML using AJAX使用 AJAX 在 HTML 中调用 Perl 函数
【发布时间】:2011-05-28 04:36:40
【问题描述】:

我遇到了挫折,我用 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);
   }

因为这个例子,我试图以这种方式传递参数:

http://www.suite101.com/content/how-to-create-a-simple-perl-ajax-application-a136201

谁能帮忙??

非常感谢。


在 Kinopiko 的建议之后,这是有道理的,我有以下几点:

HTML-

function openFile(name){
            XMLHttp.open("GET", "/cgi-bin/readFile.pl?file="+encodeURI(name), true);
            XMLHttp.onreadystatechange = function() {
            if (XMLHttp.readyState == 4) {
                var container = XMLHttp.responseText.split("\n");
                if (container.length>0){
                    for ( i=0; i< container.length-1;i++){
                        document.getElementById("TxtArea").innerHTML += container[i] + " ";
                    }
                }
            }
            else{
                document.getElementById("TxtArea").innerHTML = "333";//XMLHttp.responseText;
            }
            }
            XMLHttp.send(null);
        }

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

现在我在 javascript 中没有收到错误,但我的 XMLHttp.readyState 永远不会是 4,所以我没有得到文件的内容。

也许我使用 encodeURI 错误??

谢谢。

【问题讨论】:

  • 为什么不使用 jQuery? jquery.com 如果需要,我可以提供一些示例。
  • 或prototype.js。或道场。 ... 有大量的 Javascript 库,而不仅仅是 jQuery。它们都可以使编写变得更容易。

标签: javascript html ajax perl


【解决方案1】:

首先你需要添加一个问号:

XMLHttp.open("GET", "/cgi-bin/readFile.pl?file="+name, true);

您还需要使用encodeURI 对“名称”进行百分比编码。

在 Perl 端,你可以使用 CGI 之类的模块来获取文件的值:

 use CGI qw/param/;
 my $file = param ('file');

然后

 use URI::Escape;
 $file = uri_unescape ($file);

【讨论】:

  • 有些参数还是没有通过。 perl 脚本不执行。如果我将路径硬编码在 perl 脚本中,我会得到我想要的结果。
  • "encodeURIComponent",而不是 encodeURI。 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
  • 我接受了它,因为您的回答更正了我的代码,事实上我使用斜线错误,这是我的错。
【解决方案2】:
open (MYFILE, $file); 

应该是

open (MYFILE, $file) or die "Cannot open file $file: $!\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2014-11-06
    • 2020-03-08
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多