ajax表单提交无效

时间:2016-02-24 14:41:45

标签: javascript php jquery json ajax

首先,我在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);

       }
   }

3 个答案:

答案 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数组。

Click here for more details