我正在做一个使用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
有人可以帮我解决这个问题。谢谢。
答案 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'来故事的其余部分。