首页 > 解决方案 > 使用 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 目录中。

标签: jqueryajaxperl

解决方案


你的代码非常好。我测试了它是否有效,您需要确保您的 perl 脚本路径正确

“/cgi-bin/ajax/stackCGI/ajax.pl”表示您的脚本位于 yourdomain.com/cgi-bin/ajax/stackCGI/ajax.pl

Linux 区分大小写,因此请确保您的物理路径大小写相同。

您可以尝试直接在浏览器中访问该脚本,它应该返回

{
   "result" : null
}

推荐阅读