AJAX+PHP意外的非法令牌


AJAX+PHP Unexpected Illegal Token

我使用AJAX从PHP获得响应,它工作一切,现在我从普通echo更改为JSON echo在以下代码:

echo $_GET["jsoncall"].'({"posts": [';
echo '
{
"canvasUniqueId":"'.$uniqueId.'",
"canvasUserId":"'.$userId.'",
"canvasFile1":"'.$imageFile1.'",
"canvasFile2":"'.$imageFile2.'"
},';
echo ']})';

然后我在AJAX完成时抓取此数据以在HTML元素中设置文本,但是我得到了一个错误,控制台说:意外的非法令牌。

我很抱歉提出了一个糟糕的问题,但似乎很难解决,我无法解决。

不要尝试手工编写JSON。PHP内置了一些工具,可以为您正确转义内容。构建一个真正的数据结构,然后对其进行编码。这样可以更容易地看到正在发生什么,并且更不容易出错。

<?php
$data = Array(
    "posts" => Array(Array(
            "canvasUniqueId" => $uniqueId,
            "canvasUserId" => $userId,
            "canvasFile1" => $imageFile1,
            "canvasFile2" => $imageFile2
        ))
    );
header("Content-Type: application/javascript");
# Defend against Rosetta attack
# http://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
header("Content-Disposition: attachment; filename=f.txt");
header("X-Content-Type-Options: nosniff");
echo "/**/";
# Now output JSONP
echo $_GET["jsoncall"] . "(" . json_encode($data) . ")";