我想使用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;
})
})
答案 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版)。
我建议你:
die()
行之后尝试echo json_encode($data);
(或类似的东西)而不是让Joomla处理执行结束答案 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();
谢谢!