实时用户名检查不起作用

Live username Checking is not working

我正在尝试使用 jquery 和 php 创建注册页面,用户在其中输入用户名,当他在文本框中插入用户名时,我的网站会立即检查它是否可用并展示!但是我的代码不起作用。 这是我的 js 代码:

$(".r74re").keyup(function (e){
        var user_name = $(this).val();
        if(user_name.length >= 4)
        $.post('liveusername.php', {'username':user_name}, function(data) {
                $('.step1 input.usrname:focus').css({               
                    'background': '#fff url("images/loader.gif") 275px no-repeat',
                    'background-size':'10px 20px'
                }); 
                setTimeout(function (){
                  if(data.success){
                     console.log("in positive " + data);
                     $('.step1 input.usrname:focus').css({              
                        'background-color': 'lightgreen',
                        'background-size':''
                    });     
                  }else{
                    console.log("in negative  " + data);
                    $('.step1 input.usrname:focus').css({               
                        'background-color': 'red',
                        'background-size':''
                    });                     
                  }           
                }, 1000);


            });

这是我的 php 代码,$.Post 在 keyup 事件为 :

时调用
include ("dbcon.php");
include ("funchuge.php");

if(isset($_POST["username"]))
{
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        die();
    }
    //sleep(1);// for animating
    if(strlen($_POST["username"]) > 3){
        selfValidator($_POST["username"]);
        $username = filter_var($_POST["username"], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH); 
        $statement = $conn->prepare("SELECT username FROM users WHERE username=:usname");
        $statement->bindparam(':usname', $username);
        $statement->execute();
        if($statement->fetch()){
            $message = "ItExists";
            echo json_encode(['success' => true, 'messages' => $message]);

        }else{

            $message = "NotExists";
            echo json_encode(['success' => false, 'messages' => $message]);

        }
    }
}

我测试了很多,我发现 js 代码中的问题 if(data.success) 这种情况不起作用。如果用户还存在,它总是向我显示其他情况。我不知道为什么会这样?有人可以帮我找出我的问题。

您需要将返回的PHP字符串解析为JSON,然后才能像访问对象一样访问它。在 setTimeout.

上方添加此行
data = JSON.parse(data);