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

时间:2017-11-12 22:02:38

标签: ajax joomla syntax-error response

我想使用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;
            })
        })

2 个答案:

答案 0 :(得分:2)

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处理在您需要的所有不同版本中有所不同{ {3}}为您正在使用的版本处理JSON的方式。

我的猜测是Joomla(我还没有使用超过一年)在其标准的JSON响应中添加了一些默认属性(这表明你使用的是相对较新的3 .x版)。

我建议你:

  1. 尝试询问read the Joomla docs
  2. die()行之后尝试echo json_encode($data);(或类似的东西)而不是让Joomla处理执行结束
  3. 如果您的版本有,请查看the Joomla Q&A site

答案 1 :(得分:0)

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

  

模具();

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

谢谢!