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

标签 javascript html perl apache cgi

我对创建 Web 应用程序还很陌生,所以我对在 Web 服务器上工作非常不熟悉。只是为了让大家知道,我正在实现 html、javascript、strawberry 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 脚本[在就绪状态 block 内]要复杂得多。现在我必须向我的网络应用程序添加功能,所以我的问题是:

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

  2. 另外,如果我的 javascript 代码中有一个文件名列表,我需要使用 perl 脚本处理每个文件。目前我只处理一个,所以调用我这里的 perl 脚本就可以了。我查遍了整个互联网,试图找到如何做到这一点,但似乎每个解释都只涵盖如何调用“a”CGI 脚本。因此,在我的代码中,比如说我要“警告”用户的地方,我将有一个存储文件名的数组。我需要迭代这个数组,对于每个文件名 [数组元素],我需要调用相同的 perl 脚本来处理该文件。我应该如何实现这个?目前,我的 html 文件仅调用 perl 脚本一次,并且我不知道如何为每个文件调用它,因为我的 GET 命令超出了我的就绪状态 block ...

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

最佳答案

就概括您的 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();
}

关于javascript - 通过 APACHE 服务器调用多个 perl 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013409/

相关文章:

Javascript - 用数组替换字符串值中的相同匹配项

javascript - 异步并行最终回调不会触发

perl - 如何从哈希散列中映射(和排序)值?

regex - Perl 多行匹配,同时从文件中逐行读取

perl - 无法运行 cgi,仅显示纯文本 (Ubuntu 13.10 Apache 2.4)

javascript - Node.js Express - 在代理请求后调用 next()

javascript - Firefox 中的 Ajax 添加面板内容 JavaScript

javascript - 登录后如何在Logo下添加 "Username"

javascript - 使用 REST 生成的 Sakai XML 数据构建 RSS 提要

jquery - 防止 HTML5 contenteditable 字段中 'return' 键的默认行为