0

我正在做一个使用 jQuery、AJAX、JSON 和 Perl 的小项目。在后端,我使用 Perl 及其 CGI 模块来返回 JSON ojbect。

#!/usr/software/bin/perl5.8.8

use strict;
use warnings;
use CGI qw(:standard);
use JSON;

print header('application/json');
my $json;
# eventually the json that will be returned will based on params,
# for now using this list as example.
$json->{"entries"} = [qw(green blue yellow red pink)];
my $json_text = to_json($json);
print $json_text;

在如何从 Perl CGI 程序发送 JSON 响应的帮助下,我能够编写上述脚本?

使用 jQuery 的 get 调用此脚本:

jQuery.getJSON("script.pl?something=whatever", function(data, status) {
    console.log(data);
    console.log(status);
},"json").error(function(jqXhr, textStatus, error) {
    /* I am always ending up here. */
    console.log(jqXhr);
    console.log("ERROR: " + textStatus + ", " + error);
});

从上面的 jQuery 调用中,我期望得到一个 JSON 对象,但我得到了整个 Perl 脚本。我知道我的内容类型设置正确,因为当我从命令行执行脚本时我得到了这个:

Content-Type: application/json

有人可以帮我解决这个问题。谢谢你。

4

2 回答 2

4

相反,我得到了整个 Perl 脚本

服务器没有运行 Perl 脚本,而是将其作为纯文本提供。

您需要阅读您的服务器的手册以了解如何为 CGI 配置它。

于 2013-05-14T23:47:24.457 回答
0

正如其他人指出的那样,您需要配置 Web 服务器以将 perl 脚本作为 CGI 运行。如果您的 Web 服务器是 Apache,并且您的 CGI 名为“json.cgi”,那么您需要在 httpd.conf 中添加如下一行:

AddHandler cgi脚本.cgi

由于您使用的是 jQuery,因此您应该从 JSON pod 中读取这个小块,标题为 to_json:

   If you want to write a modern perl code which communicates to outer
   world, you should use "encode_json" (supposed that JSON data are
   encoded in UTF-8).

在故事的其余部分使用“perldoc JSON” 。

于 2013-05-15T04:47:33.860 回答