2016-01-21 43 views
1

我有一個阿賈克斯後的方法,如果成功將提醒「帳戶成功創建」。我的問題是,當它沒有創建它應該提醒帳戶已經存在,但它仍然警報相同的問題。阿賈克斯失敗的註冊不回聲結果

腳本代碼:

$(document).ready(function(){ 

    $("#btn-register").click(function(){ 
     var regaccount = $("#regaccount").val(); 
     var regpass = $("#regpass").val(); 

     if((regaccount == "") || (regpass == "")){ 
      alert("Information required!"); 
     }else { 
      $.ajax({ 
      type: "POST", 
      url: "register.php", 
      data: "regaccount="+regaccount+"&regpass="+regpass, 
      success: function(data){  
       alert("account successfully created!"); 
      }, 
      error:function(){ 
       alert("account already exists"); 
      } 
      }); 
     } 
     $("#regaccount").val(''); 
     $("#regpass").val(''); 
     return false; 
    }); 
}); 

register.php

<?php 
    include 'function.php'; 
    session_start(); 
    ob_start(); 
    $userid = rand(100000, 999999); 
     $regaccount = $_POST['regaccount']; 
     $regpass = $_POST['regpass']; 

     $regaccount = stripslashes($regaccount); 
     $regpass = stripcslashes($regpass); 
     $salt = "dctech2015ABcRXd"; 
     $regpass = md5($regpass) . $salt; 
     $regpass = sha1($regpass); 

     $con = new Functions(); 
     $con = $con->db; 

     $stmt = $con->query("SELECT * FROM users WHERE username = '$regaccount'"); 

     $count = $stmt->rowCount(); 

     if($count != 1){ 
      $con = new Functions(); 
      $con = $con->db; 
      $status="Offline"; 
      $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
      $stmt->bindValue(':userid', $userid); 
      $stmt->bindValue(':account', $regaccount); 
      $stmt->bindValue(':password', $regpass); 
      $stmt->bindValue(':status', $status); 
      $stmt->execute(); 
     }else{ 
      echo '<script>alert("account name already exists");</script>'; 
     } 

    ob_end_flush(); 
?> 
+1

因爲你沒有返回任何錯誤..你只是回聲消息到register.php文件.......警報(數據); .........並檢查什麼來... ...我猜它總是在sucessfull下 –

+0

'$ .ajax()'錯誤響應用於指示服務器上的頭響應錯誤。它不會**評估PHP腳本的條件語句返回值。相反,你應該返回一個有狀態的json對象,或者你可以在ajax回調的成功函數中有條件地觀察的東西。 – Ohgodwhy

+0

根據register.php返回消息.....我的意思是,如果記錄insrted然後返回(回聲'成功'),如果記錄存在,然後返回(回聲'存在)....然後檢查到您的JavaScript數據下的數據並根據數據提醒 –

回答

1

你需要做以下更改,使這項工作:

1)在你的PHP代碼,不寫任何警報。

2)無論用戶是否存在於數據庫中或新插入,AJAX請求只會獲取數據。我們必須處理邏輯。

3)AJAX error只有當AJAX請求失敗(請求未發送或響應狀態不是200 OK)時纔會調用該方法。

4)在你的情況下,如果用戶已經存在或甚至插入用戶數據正在從JavaScript正確傳輸到PHP,則永遠不會調用error方法。

if($count != 1){ 
    $con = new Functions(); 
    $con = $con->db; 
    $status="Offline"; 
    $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
    $stmt->bindValue(':userid', $userid); 
    $stmt->bindValue(':account', $regaccount); 
    $stmt->bindValue(':password', $regpass); 
    $stmt->bindValue(':status', $status); 
    $stmt->execute(); 
    echo 'success'; 
} 
else{ 
    echo 'exists'; 
} 

$.ajax({ 
    type: "POST", 
    url: "register.php", 
    data: "regaccount="+regaccount+"&regpass="+regpass, 
    success: function(data){  
    if (data == 'success') { 
     alert("account successfully created!"); 
    } 
    else if (data == 'exists') { 
     alert("account already exists"); 
    } 
    }, 
    error:function(){ 
    alert("Unknown problem occured."); 
    } 
}); 
+0

感謝您的幫助sir @Pupil :) – DumDumDummy

+0

@DumDumDummy,謝謝。 – Pupil

0

在這裏,你正試圖提示信息爲AJAX誤差部分這是不對的。你需要處理成功部分。

非常簡單的例子是,返回$count並檢查該值是否大於0意味着記錄存在。

變化register.php代碼:

if($count != 1){ 
    $con = new Functions(); 
    $con = $con->db; 
    $status="Offline"; 
    $stmt = $con->prepare("INSERT INTO users(user_id, username, password, status)VALUES(:userid, :account, :password, :status)"); 
    $stmt->bindValue(':userid', $userid); 
    $stmt->bindValue(':account', $regaccount); 
    $stmt->bindValue(':password', $regpass); 
    $stmt->bindValue(':status', $status); 
    $stmt->execute(); 
} 
echo $count; 

我刪除它不需要別的部分。並使用$count進行AJAX響應。

並作出對應的變化爲AJAX部分也:

$.ajax({ 
    type: "POST", 
    url: "register.php", 
    data: "regaccount="+regaccount+"&regpass="+regpass, 
    success: function(data){ 
     //If record exist... 
     if(data > 0){ 
     alert("account name already exists"); 
     } 
     else { 
     alert("account successfully created!"); 
     } 
    }, 
    error:function(){ 
     alert("There is some error, Please try after some time OR contact site admin."); 
    } 
}); 

希望這是很容易理解和幫助其他用戶也。