【问题标题】:Joomla JSON.parse: unexpected non-whitespace character after JSON dataJoomla JSON.parse:JSON 数据后出现意外的非空白字符
【发布时间】: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;
            })
        })

【问题讨论】:

    标签: ajax joomla syntax-error response


    【解决方案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 版本)。

    我建议你:

    1. 尝试在the Joomla Q&A site上提问
    2. echo json_encode($data); 行之后尝试die()(或类似的东西),而不是让Joomla 结束执行
    3. 看看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();
      

      谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-28
        • 1970-01-01
        • 2011-11-26
        • 2011-10-09
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多