jquery - 使用 AJAX 和 jQuery 从 Perl 程序中获取数据
问题描述
我将通过 jQuery 使用 AJAX 为工作项目生成一些数据文件。我打算使用 Perl 作为 AJAX 脚本。我不确定如何将数据发送回调用程序。所以我决定尝试一个简单的脚本来开始。我在这个网站上找到了一个如何通过 ajax 将数据发送到 Perl 脚本?
我将文件原样复制到我的工作环境中。我将它们包括在这里:test.html:
<!DOCTYPE html>
<html>
<head>
<title>Testing ajax</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#test").click(function(){
var ID = 100;
$.ajax({
type: 'POST',
url: '/cgi-bin/ajax/stackCGI/ajax.pl',
data: { 'data_id': ID },
success: function(res) {
alert("your ID is: " + res.result);
},
error: function() {alert("did not work");}
});
})
})
</script>
</head>
<body>
<button id="test" >Testing</button>
</body>
</html>
这里是 ajax.pl:
#!/usr/bin/perl
use strict;
use warnings;
use JSON; #if not already installed, just run "cpan JSON"
use CGI;
my $cgi = CGI->new;
print $cgi->header('application/json;charset=UTF-8');
my $id = $cgi->param('data_id');
#convert data to JSON
my $op = JSON -> new -> utf8 -> pretty(1);
my $json = $op -> encode({
result => $id
});
print $json;
当我第一次运行它时,我得到了表示“不起作用”的消息错误函数。有道理,因为 URL 参数错误。我将参数更改为指向文件的正确路径,然后确保 Perl 程序具有执行权限。这确实让我运行了成功函数,但是我没有从 Perl 程序中得到任何数据。
我从命令行运行 ajax.pl,它运行没有错误。我硬连接了一个返回值,但我仍然没有得到任何数据。我在 Perl 代码中故意放了一个语法错误,当我通过网页调用它时,我仍然收到成功消息。当我从文件中删除执行权限时,我确实收到了指示错误“不起作用”的消息。
我不确定是否需要启用特殊的服务器设置才能使用 ajax,或者我需要将 Perl 文件放入一个特殊的目录。我已经对这个问题进行了大量搜索,但我从来没有发现任何限制,只是警告确保我正确指定了位置,我就是这样。我应该注意到 Perl 脚本与 HTML 文件位于同一目录中。它不在 cgi-bin 目录中。
解决方案
你的代码非常好。我测试了它是否有效,您需要确保您的 perl 脚本路径正确
“/cgi-bin/ajax/stackCGI/ajax.pl”表示您的脚本位于 yourdomain.com/cgi-bin/ajax/stackCGI/ajax.pl
Linux 区分大小写,因此请确保您的物理路径大小写相同。
您可以尝试直接在浏览器中访问该脚本,它应该返回
{
"result" : null
}
推荐阅读
- python - 使用带有 ci 参数的 seaborn 线图时获取波段值
- reactjs - 重置 recaptcha 时出现问题 - 无法读取代码的 null 属性“重置”
- docker - Travis 条件构建 - 如何跳过除主分支之外的部署阶段
- java - 使用 charAt() 时无法打印字符串
- mysql - GoLang 的配置返回“非名称”错误
- cvxpy - 尝试为正半定锥约束创建约束时,问题不遵循 DCP 规则
- java - 为多个主类创建 1 个 jar 文件
- python-3.x - 为什么“全局”在“如果”中不起作用?
- regex - 正则表达式分别在任何地方查找匹配项
- android - 使用 google_maps_autocomplete 后 Flutter 无法运行