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

Joomla JSON.parse: unexpected non-whitespace character after JSON data

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

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

和错误:

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

看来应该没有第二个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;
            })
        })

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

这个错误很容易解释,你的 JSON 结构在 31 列有一个错误。您在问题中提供的 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 版本).

我建议你:

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

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

die();

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

谢谢!