2016-07-31 58 views
1

我是新來的ajax,這是我第一次嘗試使用它。如何從php文件檢索錯誤消息到另一個php文件?

我想要做的是創建一個小系統註冊電子郵件和密碼到數據庫,而不更新頁面,它工作得很好!

然而,正如你會注意到我的'register.php'文件,有一個條件,不允許重複的電子郵件,以及PDOException,以防止錯誤...所以,我怎麼能發送消息(警報或任何)我的索引頁面,以防其中的任何一個發生?

這是我的.js文件:

$(document).ready(function(){ 

    $("#btnRegister").click(function(){ 

     $.ajax({ 
      type: 'post', 
      url: 'register.php', 
      data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() } 
     }).done(function(){ 
      $("#frmEmail").val(''); 
      $("#frmPassword").val(''); 
      $("#frmEmail").focus(); 
     }); 
    }); 
}); 

我的 'register.php' 文件:

<?php 

    try 
    { 
     $handler = new PDO('mysql:host=127.0.0.1;dbname=register', 'root', ''); 
     $handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $email = $_POST['txtEmail']; 
     $password = $_POST['txtPassword']; 

     $sql = "SELECT email FROM users WHERE email = ?"; 
     $query = $handler -> prepare($sql); 
     $query -> bindValue(1, $email); 
     $query -> execute(); 

     if(($query -> rowCount()) != 0) 
      die("Error: the inserted email already exists."); 
     else 
     { 
      $sql = "INSERT INTO users (email, pass) VALUES (?, ?)"; 
      $query = $handler -> prepare($sql); 
      $query -> bindValue(1, $email); 
      $query -> bindValue(2, $password); 
      $query -> execute(); 
     } 
    } 
    catch(PDOException $ex) 
    { 
     die("Error: " . $ex -> getMessage()); 
    } 

?> 

回答

0

通常情況下,你的PHP文件將返回指示註冊成功或failre的響應。

在你的PHP文件,而不是die荷蘭國際集團時,有一個錯誤,你應該返回包含錯誤消息的JSON編碼陣列,例如:

if(($query -> rowCount()) != 0) 
    echo json_encode(array('error' => "Error: the inserted email already exists.")); 
    exit; 
else 
在JavaScript的 done功能

然後,可以檢查此消息:

}).done(function(data){ 
    if (data.error) { 
     alert(data.error); // or do something else 
    } else { 
     // every thing looks ok, do your thing 
    } 
}); 

我建議你總是返回東西從PHP中,無論是作爲上述錯誤信息,或者乾脆json_encode(array('success' => true));。這樣,您就可以確定請求實際上已經完成了預期的工作,並且不會返回空白頁面以解決其他(不良)原因。

注意:如果你獲得這個工作的問題,您可能需要添加dataType: 'json'到你的Ajax選項(type: 'post'下)

+0

哈哈!這比我想象的更容易!謝謝,icecub的回答也非常有幫助!它正在工作,我使用'死'功能的原因是因爲我將用戶發送到另一個頁面,所以我認爲「這可能是學習ajax的好機會」,我看到我將學習一些JSON以及... –

0

所有你需要做的是改變所有的die();echo "";所以不是殺死PHP部分,它會將消息返回給您的索引文件。接下來只是改變你的jQuery腳本:

$(document).ready(function(){ 

    $("#btnRegister").click(function(){ 

     $.ajax({ 
      type: 'post', 
      url: 'register.php', 
      data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() } 
     }).done(function(msg){ 
      if(msg != ''){ 
       alert(msg); 
      } 
      $("#frmEmail").val(''); 
      $("#frmPassword").val(''); 
      $("#frmEmail").focus(); 
     }); 
    }); 
}); 
相關問題