1

我对创建 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 脚本 [在就绪状态块内] 要复杂得多。现在我必须向我的网络应用程序添加功能,所以对于我的问题:

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

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

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

4

1 回答 1

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();
}
于 2013-06-09T23:31:29.870 回答