首先,我在php,mysql和js上的所有工作都在本地服务器上。这是我第一次将工作放在网上。但是我遇到了一些问题。
问题是每当我提交表单时,我的帖子中都没有添加评论。警报方法alert(response)
我附加了内部警报" [对象对象]"。这是否意味着它是一个有效的JSON?
alert(obj)
的第二个警报甚至不会触发
我还得到了以下错误:
SyntaxError:JSON.parse:第1行第2列的意外字符 JSON数据
... tion(b){if(a.JSON&& a.JSON.parse)返回a.JSON.parse(b +""); var C,d = NULL,E = m.trim(...
负责ajax提交的部分是:
$.ajax('../includes/verifyanswer.php',{
data:{
'answer_body': CKEDITOR.instances.content.getData(),
'userpost_post_id': <?php echo $postid;?>,
'users_user_id': <?php echo $userdata->user_id; ?>
},
type:"POST",
dataType:'json',
success:function(response){
alert(response);
var obj=$.parseJSON(response);
alert(obj);
$('#mainanswer').hide();
$('#answerform').hide();
$('#answerthisquestion').show();
var str="<div class='styleanswer' >"+obj[0]['answer_body']+"</div><div class='customcmntholder'></div><span id='customcomment' class='cmnt' onclick='letmecomment(event);'>Add a Comment...</span><form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post' name='cmntform'> <textarea data-id="+obj[0]['answer_id']+" class='customcmntform' placeholder=' add a comment......' ></textarea></form><hr>";
$('#answerwrapper').append(str);
$('#answerwrapper pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
},
error:function(response){
alert(response);
}
})
verifyanswer.php:
require_once '../core/init.php';
$answer=$_POST['answer_body'];
$post_id=$_POST['userpost_post_id'];
$answerer=$_POST['users_user_id'];
if(isset($answer,$post_id,$answerer)){
if(!empty($answer) && !empty($post_id) && !empty($answerer)){
$db=DB::getInstance();
$result=$db->post_and_fetch("CALL login.post_and_fetch_ans(?,?,?)",array($answer,$post_id,$answerer))->result();
echo json_encode($result);
}
}
答案 0 :(得分:3)
因为您说dataType:'json',
,jQuery将在HTTP响应中解析JSON,并在>>将其传递给success
函数之前将其转换为的JavaScript数据结构。
这意味着当你说var obj=$.parseJSON(response);
时你隐式将它转换回一个字符串(但不是一个JSON字符串,转换为"[object Object]"
),然后尝试解析那个作为JSON,它不是,所以它失败了。
答案 1 :(得分:0)
您的ajax提交已告知response
将以JSON(type:"POST",
)形式出现,因此您不需要var obj=$.parseJSON(response);
行。此外,调试代码的更好方法是使用console.log
代替alert
,在google Chrome控制台中查找firebug(Firefox的扩展名)中的结果。
在PHP代码中,您要测试已设置的变量,您应该自己测试$_POST
个变量,或者在其上使用数据提取。如果您愿意,也可以加入这两个if
。
就像这样:
require_once '../core/init.php';
extract($_POST);
if(isset($answer_body,$userpost_post_id,$users_user_id) AND
!empty($answer_body) AND !empty($userpost_post_id) AND !empty($users_user_id)){
$db=DB::getInstance();
$result=$db->post_and_fetch("CALL login.post_and_fetch_ans(?,?,?)",array($answer_body,$userpost_post_id,$users_user_id))->result();
echo json_encode($result);
}
答案 2 :(得分:-1)
您可以使用JSON.parse()方法将JSON响应解析为javascript数组。