0

Ajax で常に "textStatus: parsererror, errorThrown: SyntaxError: Unexpected token :" が発生するという問題があります。

ただし、応答は "responseText: {"success":"Search Successful","Timetable":"aaa"}," です。

Web サイト 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");
        }
    }
  })

パールはこちら

    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;
4

1 に答える 1

0

独自の 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);
于 2013-07-17T19:24:44.573 に答える