【发布时间】: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