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 版本).
我建议你:
- 尝试在 the Joomla Q&A site
上提问
- 尝试在
echo json_encode($data);
行之后 die()
(或类似的东西),而不是让 Joomla 处理执行结束
- 看看 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();
谢谢!
我想使用 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 版本).
我建议你:
- 尝试在 the Joomla Q&A site 上提问
- 尝试在
echo json_encode($data);
行之后die()
(或类似的东西),而不是让 Joomla 处理执行结束 - 看看 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();
谢谢!