js $ .ajax调用perl,需要显示返回fetchall_arrayref的perl

时间:2014-12-17 00:43:52

标签: mysql ajax perl

我的$ .ajax正在调用一个Perl文件,它在fetchall_arrayref中从MySQL返回数据。 如何将数据恢复到ajax并放入jQuery中的<select>下拉选项?它从perl返回一些东西,但<select>下拉列表显示整个ajaxFunctions.pl文件,char by char - 每个char都是一个选择。它需要调用Perl文件,在那里执行mySQL SELECT,并将SELECT查询结果返回给$.ajax&#34;数据&#34;部分,以便我可以在GUI中显示它。我测试了MySQL查询工作正常[返回3项,组名]。

以下是perl代码:

if ($q->param('ajaxAction') eq "getGroups") {
my $return;
eval {
    my $query = qq(SELECT DISTINCT group FROM dbtable ORDER BY group);
    my $dbh = dbConnect();
    my $sth = $dbh->prepare($query);
    $sth->execute();
    $return = $sth->fetchall_arrayref();
};
if ($@) {
    $return = {'STATUS' => 'FAIL',
               'ERROR' => 'Error getting the group names. ' . $@};
}
print $q->header('application/json');
print to_json($return);
exit(0);
}

这是Javascript代码:

function getGroups() {
$.ajax({
    type: 'POST',
    url: '/Project/metrics/cgi-bin/ajaxFunctions.pl',
    data: ({ ajaxAction: 'getGroups'}),
    success: function(data) {
        for(var i =0; i < data.length; i++) {
            $("#groupReportSelect").append('<option value="' + data[i] + '">&nbsp;&nbsp;' + data[i] + '</option>');
        }
        $('#groupReportSelect').multiselect();
        $("#groupReportSelect").multiselect("checkAll");
        getData();
    },
    error: function(request, status, err) {
        console.log('Error fetching groups. ' + err);
    }
}); 

}

同样,输出是select中的每个选项都是整个perl文件的单个字符,从"#", "!", "/", of #!/usr/bin/perl等开始。

如果我遗漏了任何东西,请告诉我。我已阅读其他几篇文章,并试图向您提供所有适当的数据来回答我的问题。

2 个答案:

答案 0 :(得分:1)

您尚未将服务器配置为运行Perl程序,因此它将以纯文本形式返回。

您需要查阅网络服务器的文档,了解如何执行该程序。

您似乎正在编写CGI(不要这样做,编写PSGI,然后使用CGI处理程序进行部署,如果它确实需要CGI),那么请将其用作手册中的搜索词。

这是a detailed tutorial on how to do it with Apache

答案 1 :(得分:1)

您的AJAX请求似乎是获取对象的url:属性( '/Project/metrics/cgi-bin/ajaxFunctions.pl',)中列出的整个perl文件,而不是REQUEST的输出到那个URI。

这很可能是由于您的CGI和HTTP服务器环境设置不当造成的。您的Web服务器需要设置CGI Handler才能正确地将.pl个文件作为应用程序而非文件提供。