2016-07-19 240 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

這解決了這個問題,謝謝你的信息。從你提供的鏈接中學到很多東西。 –