2016-07-19 184 views
0

我正在使用jQuery和PHP使用AJAX进行简单的注册页面。PHP对AJAX请求没有响应

这里是为了使Ajax调用脚本:使用PDO

<?php 
require_once 'dbconnect.php'; 
if($_POST) { 
    $user_name = $_POST['user_name']; 
    $user_email = $_POST['user_email']; 
    $user_password = $_POST['password']; 
    try { 
     $sth = $dbh->prepare("SELECT * FROM logindata WHERE email=:email"); 
     $sth->execute(array(":email"=>$user_email)); 
     $count = $sth->rowCount(); 
     if($count==0){  
      $sth = $dbh->prepare("INSERT INTO logindata(username,email,pass) VALUES(:uname, :email, :pass)"); 
      $sth->bindParam(":uname",$user_name); 
      $sth->bindParam(":email",$user_email); 
      $sth->bindParam(":pass",$user_password); 
      if(!$sth->execute()) { 
       echo "3"; 
      } else { 
       echo "2"; 
      } 
     } else{  
     echo "1"; 
     }  
    } 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
    } 
} 
?> 

<script> 
    function submitForm(){ 
     var data1=$('#regform').serialize(); 
     $.ajax({ 
     type:'POST', 
     url:'signup.php', 
     data:data1, 
     success: function(response){ 
      console.log(response); 
      if(response==1) 
      alert('taken'); 
      else if(response==2) 
       alert('registered'); 
       else 
       alert(response); 
     } 
     }); 
    } 
    </script> 

和响应调用PHP脚本:

signup.php。

dbconnect.php:

<?php 
    $dbhost='localhost'; 
    $dbuser='root'; 
    $dbpass=''; 
    $dbname='ambitio'; 
    try{ 
    $dbh=new PDO("mysql:host={$dbhost};dbname={$dbname}",$dbuser,$dbpass); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e){ 
    echo $e->getMessage(); 
    } 
?> 

问题: 无论是两个响应都返回到jQuery的AJAX调用。我检查了console.log(),但浏览器中没有显示任何内容。数据存储在MySQL数据库中(检查它),这意味着​​在PHP中工作正常,但浏览器中仍未显示警报。如果count评估为01确实会返回。

此外,当我没有实际提交表单时刷新表单时,我在浏览器控制台收到错误POST 412 (Precondition Failed)

编辑:发表完整的PHP。

EDIT2:Apache的访问日志

::1 - - [19/Jul/2016:23:51:55 +0530] "GET /ambitio/css/bootstrap.css HTTP/1.1" 304 - "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [19/Jul/2016:23:51:55 +0530] "GET /ambitio/css/overboot.css HTTP/1.1" 304 - "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [19/Jul/2016:23:51:55 +0530] "GET /ambitio/css/font-awesome.css HTTP/1.1" 304 - "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [19/Jul/2016:23:51:55 +0530] "GET /ambitio/js/jquery.js HTTP/1.1" 304 - "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [19/Jul/2016:23:51:55 +0530] "GET /ambitio/js/bootstrap.js HTTP/1.1" 304 - "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [20/Jul/2016:00:43:36 +0530] "GET /ambitio/signup.html HTTP/1.1" 200 1454 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [20/Jul/2016:00:43:46 +0530] "POST /ambitio/signup.html HTTP/1.1" 200 1454 "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
::1 - - [20/Jul/2016:00:43:46 +0530] "POST /ambitio/signup.php HTTP/1.1" 200 1 "http://localhost/ambitio/signup.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 

EDIT3:表格HTML标记:

<form method="post" id="regform" onSubmit="submitForm()"> 
     <input type="text" placeholder="Username" id="user_name" name="user_name" /> 
     <input type="email" placeholder="Email" id="user_email" name="user_email" /> 
     <input type="password" placeholder="Password" id="password" name="password" /> 
     <input type="password" placeholder="Retype password" id="rpassword" name="rpassword" /> 
     <input type="submit" id="submit"/> 
</form> 
+0

发表您的所有PHP代码 – 0x13a

+0

它不是一个asynchoronous电话吗? – msantos

+0

@ 0x13a更新了问题。 –

回答

1

由于您的形式不包含网址发送给你的onSubmit -Handler(submitForm)没有按不会返回false,表单实际上会被浏览器发布到它当前所在的页面(这很可能无法处理表单的POST数据),并且只会重新加载包含页面的登录表单。

POST可能会发送到您的ajax脚本以及,但您的浏览器不会等待响应,因为它已经移动。

有关提交过程的更多详细信息,请参见https://html.spec.whatwg.org/multipage/forms.html#concept-form-submit

解决办法是要么添加return falsesubmitForm函数或onSubmit处理器(;return false

+0

这解决了这个问题,谢谢你的信息。从你提供的链接中学到很多东西。 –