AJAX没有';无法从Perl正确接收JSON编码的数据

AJAX没有';无法从Perl正确接收JSON编码的数据,json,ajax,perl,Json,Ajax,Perl,Perl结果已正确编码为JSON,响应头已设置为“application/JSON”,AJAX配置似乎没有问题。还是我错过了什么 use strict; use warnings; use Cwd; use JSON::PP qw(encode_json); use CGI qw(:standard); chdir( cwd() . "/gallery" ); my $cdir = cwd(); my @win = split ( ' ', `ls $cdir` ); my $res =

Perl结果已正确编码为JSON,响应头已设置为“application/JSON”,AJAX配置似乎没有问题。还是我错过了什么

use strict;
use warnings;
use Cwd;
use JSON::PP qw(encode_json);
use CGI qw(:standard);


chdir( cwd() . "/gallery" );

my $cdir = cwd();
my @win = split ( ' ', `ls $cdir` );

my $res = [ ''.scalar(@win) ]; 

foreach my $w ( @win )
{
    open ( my $fp, "<:utf8", "$cdir/$w/tag.txt" );
    while( <$fp> )
    {
        unless( m#^\s*$# )
        {
            chomp;
            push ( @$res, $_ );
        }
    }
    close ($fp);
}

my $resInJSON = encode_json($res);


print "Content-type: application/json\n\n";
print $resInJSON;    
Javascript代码是:

function loadGallery()
{
    $.ajax(
    {
     type: 'GET',
     url: "/cgi-bin/count.cgi", 
     async: false,
     dataType: 'json',
     success: function(result)
        {
            document.getElementById("test-output-1").innerHTML = result[0];   // output is 3
            document.getElementById("test-output-2").innerHTML = result[1];   // output is undefined
            document.getElementById("test-output-3").innerHTML = result[2];   // output is undefined
        }
    });
} loadGallery();

AJAX接收的数据类型是JSON。

我相信您正在尝试分割
结果[0]
所以
结果[0][0]=“2”
结果[0][1]=“2015-1-2猫”
结果[0][2]=“2015-1-4狗和女孩”
您没有提供可运行的演示。当我使其可运行时,它会产生预期的结果

zzz.html

<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>

<div id="test-output-1"></div>
<div id="test-output-2"></div>
<div id="test-output-3"></div>

<script>
function loadGallery()
{
    $.ajax(
    {
     type: 'GET',
     url: "zzz.cgi",
     async: false,
     dataType: 'json',
     success: function(result)
        {
            document.getElementById("test-output-1").innerHTML = result[0];
            document.getElementById("test-output-2").innerHTML = result[1];
            document.getElementById("test-output-3").innerHTML = result[2];
        }
    });
}

loadGallery();
</script>
输出:

2
2015-1-2 cat
2015-1-4 dog and girl

看起来您的JSON调用的脚本返回了

[["2","2015-1-2 cat","2015-1-4 dog and girl"]]
反而

["2","2015-1-2 cat","2015-1-4 dog and girl"]

也许你不是在调用你认为是在调用的脚本?或者您可能从早期版本的脚本中得到缓存响应?

console.log(结果)告诉您什么?@Matt Jacob没有显示任何内容!?“AJAX无法正确接收JSON编码的数据”-您如何确定这一点?它收到了什么?开发者工具中的“网络”选项卡为请求显示了什么?@Quentin,我问了和你一样的问题,直到我意识到他确实在JS代码片段中的注释(大部分在屏幕外)中提供了信息。此外,FWIW、Perl还有用于在目录中列出文件的本机函数(无需向
ls
)。
[["2","2015-1-2 cat","2015-1-4 dog and girl"]]
["2","2015-1-2 cat","2015-1-4 dog and girl"]