通过 APACHE 服务器调用多个 perl 脚本

Calling multiple perl scripts over APACHE server?

本文关键字:perl 脚本 调用 APACHE 服务器 通过      更新时间:2023-09-26

我对创建Web应用程序很陌生,所以我对在Web服务器上工作非常陌生。只是为了让大家知道,我正在实现html,javascript,strawberry perl,AJAX并在APACHE 2 Web服务器上运行。 我终于让我的 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>

所以这个文件测试.html在同一目录中调用一个perl脚本[try.pl]。此外,perl 脚本只打印一个数字,因此这会提醒用户该数字。这只是我的实现的一个示例。我的实际perl脚本和java脚本[在就绪状态块中]要复杂得多。现在我必须向我的 Web 应用程序添加功能,所以对于我的问题:

  1. 我希望在发生不同事件时运行第二个单独的perl脚本。例如,当单击一个按钮时,正在运行此perl脚本。我将有另一个不同的事件,比如双击图标或其他东西,这将需要调用第二个perl脚本。我会简单地让新事件调用一个不同的函数[第一个称为 Loadxmldoc((],它与我在这里拥有的函数几乎相同,只是它会在就绪状态块中具有不同的代码并在结束时调用不同的 perl 脚本?我对如何实现这一点有点困惑。

  2. 另外,如果我的javascript代码中有一个文件名列表,我需要使用perl脚本处理每个文件。 目前我只处理一个,所以像我在这里一样调用 perl 脚本很好。我已经在互联网上寻找我该如何做到这一点,但似乎每个解释都只涵盖了如何调用"一个"CGI脚本。因此,在我的代码中,说我在哪里"提醒"用户,我将有一个存储文件名的数组。我需要遍历这个数组,对于每个文件名 [array 元素],我需要调用相同的 perl 脚本来处理该文件。我应该如何实现这一点?目前,我的 html 文件只调用一次 perl 脚本,我不知道如何为每个文件调用它,因为我的 GET 命令在我的就绪状态块之外......

任何帮助或指导将不胜感激。预计我很快就会交付,并且花了太多时间筛选对我没有帮助的重复示例......:/

就通用

化 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();
}