我正在尝试用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);
});
以下是我在{key}事件发生时$.Post
调用的php代码:
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]);
}
}
}
我测试了很多,我在行if(data.success)
中的js代码中发现了问题这条件不起作用..如果用户也存在,它总是显示我的其他情况..我不知道为什么会发生这种情况?有人可以帮我找出问题所在。
答案 0 :(得分:0)
您需要将返回的PHP字符串解析为JSON,然后才能像对象一样访问它。在setTimeout
上方添加此行。
data = JSON.parse(data);