如果我正确接近这一点,我根本不确定。我在Perl中创建了一个脚本,它接受一些简单的数据并创建一个简单的json格式输出。当我在shell中本地运行它时,我可以使用print命令看到输出是正确的。该文件名为“dates.cgi”,并从cgi-bin目录本地运行。当我尝试直接在本地Web服务器上访问该文件时,出现500错误。当然,它不是一个网页,只是json输出。
我认为这是一个Web服务器错误。所以我设置了一个标准的jquery ajax调用,但它也失败了。
以下是正确打印到终端的Perl脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $dir = '../data';
my $json;
my @dates;
opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
# Use a regular expression to ignore files beginning with a period
next if ($file =~ m/^\./);
# pluck out first 8 chars
my $temp = substr $file, 0, 8;
# populate array
push(@dates, $temp);
}
closedir(DIR);
# sort high to low
@dates = sort { $b <=> $a } @dates;
# print Dumper (@dates);
# loop through array and create inner section of json
my $len = @dates;
my $x = 0;
foreach (@dates){
if ($x < $len-1){
$json .= "\t{'date':'$_'},\n";
} else {
$json .= "\t{'date':'$_'}\n";
}
$x++;
}
# add json header and footer
$json = "{'dates':[\n" . $json;
$json .= "]}";
# print
print "$json\n";
我正试图从网页上以这种方式访问它以加载数据:
// load data json
$.ajax({
url: "cgi-bin/dates.cgi",
async: false,
success: function (json) {
dates = json;
alert(dates);
alert("done");
},
fail: function () {
alert("whoops");
}
dataType: "json"
});
它只是默默地失败了。我下一步该看哪儿?
答案 0 :(得分:1)
您应该在perl文件中包含以下内容。
use CGI;
my $cgi = new CGI;
然后为json打印正确的标题,或者在打印任何内容之前使用text plain。
print "Content-Type: application/json", "\n\n";
print "Content-type: text/plain", "\n\n";
答案 1 :(得分:0)
检查jquery documentation for .ajax。看起来他们链接done
,fail
,always
等,而不是在第一个参数内指定
实施例,
$.ajax({
url: "cgi-bin/dates.cgi",
async: false,
dataType: "json"
})
.done(function(data) {
dates = data;
alert(dates);
alert("done");
})
.fail(function() {
alert("whoops");
})
.always(function() {
alert( "complete" );
});