我是创建Web应用程序的新手,所以我对在Web服务器上工作非常不熟悉。只是为了让每个人都知道,我正在实现html,javascript,草莓perl,AJAX,以及在APACHE 2 Web服务器上运行。我终于让我的网络应用程序工作,我有一个html文件调用我的htdocs目录中的perl脚本。这是我的.html文件的模拟以供参考,这个只是提醒用户perl脚本打印的输出:
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
var str;
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// Get output from perl script and print it
str = xmlhttp.responseText;
alert(str);
}
}
xmlhttp.open("GET","http://localhost/try.pl" , false); //perl script
xmlhttp.send();
}
</script>
</head>
<body>
<h2>Example</h2></div>
<button type="button" onclick="loadXMLDoc()">Display</button>
</body>
</html>
因此,此文件test.html在同一目录中调用perl脚本[try.pl]。此外,perl脚本只打印一个数字,以便向用户提醒该号码。这只是我实施的一个例子。我的实际perl脚本和java脚本[在就绪状态块内部]要复杂得多。现在我必须为我的网络应用添加功能,所以对我的问题:
我希望在发生其他事件时运行第二个单独的perl脚本。例如,单击按钮时,将运行此perl脚本。我将有另一个不同的事件,比如双击图标或其他东西,需要调用第二个perl脚本。我是否只是让新事件调用一个不同的函数[第一个称为Loadxmldoc()]几乎与我在这里的函数相同,除了它在就绪状态块中将有不同的代码并在最后调用一个不同的perl脚本它?关于如何实现这一点,我有点困惑。
此外,如果我的javascript代码中有文件名列表,我需要使用perl脚本处理每个文件。目前我只处理一个所以调用perl脚本,因为我在这里很好。我已经浏览了整个互联网,试图找到我将如何做到这一点,但似乎每个解释只包括如何调用“一个”CGI脚本。所以在我的代码中,说我在“警告”用户的位置,我将有一个存储文件名的数组。我需要迭代这个数组,对于每个文件名[数组元素],我需要调用相同的perl脚本来处理该文件。我应该怎么做呢?目前,我的html文件只调用perl脚本一次,我不知道如何为EACH文件调用它,因为我的GET命令在我的就绪状态块之外...
任何帮助或指示都将不胜感激。我预计很快就会送出来并花费太多时间来筛选那些没有帮助我的重复例子......:/
答案 0 :(得分:0)
至于概括你的AJAX请求,你可以创建一个处理不同类型响应的函数(或者更确切地说,一组函数),如下所示:
var requests = [];
requests['script1'] = "http://localhost/try.pl";
requests['script2'] = "http://localhost/try2.pl";
var response_processing = [];
response_processing['script1'] = function (xmlhttp) {
var str = xmlhttp.responseText;
alert(str);
};
// Here, you can add more functions to do response processing for other AJAX calls,
under different map keys.
现在,在您的AJAX代码中,您根据脚本名称调用适当的请求和适当的响应处理器(传递给loadXMLDoc()
调用,如下所示):loadXMLDoc("script1");
function loadXMLDoc(script_name) {
// Your generic AJAX code as you already implemented
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
response_processing[script_name](xmlhttp);
// Careful so script_name doesn't get closured in onreadystatechange()
}
}
xmlhttp.open("GET", requests[script_name], false); //perl script
xmlhttp.send();
}