为什么我不能从Perl脚本返回json对象?

时间:2013-05-14 23:44:09

标签: jquery json perl

我正在做一个使用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;

How can I send a JSON response from a Perl CGI program?

的帮助下,我能够编写上述脚本

使用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

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

2 个答案:

答案 0 :(得分:4)

  

而是我得到整个Perl脚本

服务器没有运行Perl脚本,它以纯文本形式提供服务。

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

答案 1 :(得分:0)

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

AddHandler cgi-script .cgi

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

   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'来故事的其余部分。