javascript - Ajax注册失败不回显结果

标签 javascript php jquery ajax echo

我有一个ajax post方法,如果成功将提醒“帐户已成功创建”。我的问题是,当它没有创建时,它应该提醒帐户已经存在,但是它仍然提醒相同的问题。

脚本代码:

$(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;  
    });
});

注册.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) 在您的 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.");
  }
});

关于javascript - Ajax注册失败不回显结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916291/

相关文章:

javascript - angular-route 和 angular-ui-router 有什么区别?

javascript - 在JavaScript中,如何在特定时间运行函数?

javascript - 自动从 HTML 文件中删除换行符

javascript - 使用 jquery-ajax 加载页面时内容重复

php - PHP中UTF-8编码的问题

javascript - 联系表单显示成功消息但不发送电子邮件

javascript - jQuery + Django : get data from HTML table

javascript - 如何使用 javascript 将 textarea 转换为显示其他内容(例如 base64 解密)?

jquery - 使用 jquery 隐藏(切换)嵌套列表

javascript - 来自 JSNI 的外部函数调用不起作用