Joomla JSON.parse:JSON 数据后出现意外的非空白字符

Posted

技术标签:

【中文标题】Joomla JSON.parse:JSON 数据后出现意外的非空白字符【英文标题】:Joomla JSON.parse: unexpected non-whitespace character after JSON data 【发布时间】:2018-04-25 13:20:14 【问题描述】:

我想使用 jQuery.ajax 将新标记(关于文章)发送到数据库并更改页面上的标记数量。 但是我从服务器收到了错误的 AJAX 响应。

"likes":"40","dislikes":"29""success":true,"message":null,"messages":null,"data":[]

和错误:

SyntaxError: JSON.parse: 意外的非空白字符后 JSON数据第1行第31列的JSON数据

似乎不能有第二个ajax响应。但我不明白它去了哪里。

这是我来自 Joomla 插件的 php 代码。

$marks = plgContentLikesHelper::getMarks($articleID);
        $data=array();
        $data['likes'] = $marks->likes;
        $data['dislikes'] = $marks->dislikes;
        echo json_encode($data);

这是我来自 Joomla 插件的 jQuery 代码。

jQuery(document).ready(function()

            jQuery('div.plg-likes > a ').click(function (e) 
                var id = jQuery(this).parent('div.plg-likes').attr('id');
                var opinion = jQuery(this).attr('id');

                jQuery.ajax(
                    type: "POST",
                    dataType: "json",
                    url: "index.php?option=com_ajax&group=content&plugin=likes&format=json",
                    data:  articleId: id, articleOpinion: opinion ,
                    success: function(data)  /* troubles are here */
                            alert(data["likes"]);
                    
                )
                return false;
            )
        )

【问题讨论】:

【参考方案1】:

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 31 of the JSON data

这个错误很容易解释,您在 31 列的 JSON 结构中有一个错误。问题中提供的 JSON 是:

"likes":"40","dislikes":"29""success":true,"message":null,"messages":null,"data":[]

所以, 表示对象,您的字符串连续有两个 JSON 对象。查看json.org 以了解您的 JSON。

第 30 列是您的对象结束的地方,并且似乎添加了第二个对象……您没有指定 Joomla 的版本,因此 JSON 处理在您需要 read the Joomla docs 的所有不同版本之间有所不同在为您使用的版本处理 JSON 的方式上。

我的猜测是 Joomla(我已经有一年多没有使用了)在它的标准 JSON 响应中添加了一些默认属性(这表明您使用的是相对较新的 3.x 版本)。

我建议你:

    尝试在the Joomla Q&A site上提问 在echo json_encode($data); 行之后尝试die()(或类似的东西),而不是让Joomla 结束执行 看看JResponseJson,如果你的版本有的话。

【讨论】:

【参考方案2】:

答案在页面响应后的下一个简单代码中:

死();

$db->setQuery($query);
$db->execute();
$marks = plgContentLikesHelper::getMarks($articleID);
$data=array();
$data['likes'] = $marks->likes;
$data['dislikes'] = $marks->dislikes;
echo json_encode($data);
die();

谢谢!

【讨论】:

以上是关于Joomla JSON.parse:JSON 数据后出现意外的非空白字符的主要内容,如果未能解决你的问题,请参考以下文章

JSON.parse()

JSON.parse()

JSON.stringify() / JSON.parse()

Json.parse()

eval()和JSON.parse()解析数据

JSON.parse和JSON.stringify