jQuery得到parsererror,但Perl的状态是200

jQuery get parsererror but status is 200 from Perl

本文关键字:状态 Perl 得到 parsererror jQuery      更新时间:2023-09-26

我遇到了一个关于Ajax的问题,总是得到"textStatus:parsereror,errorThrown:SyntaxError:意外令牌:",

但是,响应是"responseText:{"success":"Search Successful","Timetable":"aaa"},"

我在jsonlint.com网站上搜索过,它显示JSON是有效的。

注意:"aaa"是我想要返回的字符串,我想知道它可能太长了,所以把它改为"aaa",但错误仍然存在。

这是来自Ajax 的代码

    $.ajax({
    type:"Get",
    url:"cgi-bin/timetable.pl",
    contentType:"application/json;charset=utf-8",
    dataType:"jsonp",
    data:"username="+username,
    error:function(XMLHttpRequest,textStatus,errorThrown)
    {
        $('div#result').text(result);
        $('div#result').text("responseText: " + XMLHttpRequest.responseText 
        + ", textStatus: " + textStatus 
        + ", errorThrown: " + errorThrown);
        $('div#result').addClass("error");
    },
    success: function(data)
    {
        if (data.error) 
        {
            $('div#result').text("data.error: " + data.error);
            $('div#result').addClass("error");
        }
        else
        {
            $('div#result').text("data.success: " + data.success 
                + ", data.userid: " + data.clasinfo);
            $('div#result').addClass("success");
        }
    }
  })

这是Perl的

    foreach $classid(@claid)
    {
$class->execute($classid);
while (@cinfo = $class->fetchrow_array())
{
    $num = @cinfo;
    $combineinfo = "";
    for ($i=0;$i<$num;$i++)
    {
         $combineinfo .= $cinfo[$i]."V";
    }
}
 push(@info,$combineinfo); 
 }
 $json = (@info)?
 qq{{"success":"Search Successful","Timetable":"'@info"}}:
 qq{{"error":"Search Error"}};

 print $cgi->header(-type => "application/json", -charset => "utf-8");
 print $json;

与其编写自己的JSON,不如让perl为您编码。

use JSON::PP;
my $response = (@info)?
    {"success" => "Search Successful", "Timetable" => @info}:
    {"error" => "Search Error"};
my $json = JSON::PP->new->allow_nonref;
print $json->encode($response);