我在HTML / CSS / JS中创建一个注册表单,它使用AJAX请求从服务器获取响应。在我的jQuery中,我使用一种方法来验证表单内容,它还调用一个函数(包含ajax)来查看用户名是否存在。我检查了类似的问题,但与我的问题无关。
AJAX进入像这样的函数
function checkIfUserNameAlreadyExists(username)
{
// false means ok, i.e. no similar uname exists
$.ajax
({
url : 'validateUsername.php',
type : 'POST',
data : {username:username},
success : function(data,status)
{
return data;
}
});
}
PHP代码看起来像这样
<?php
if($_SERVER['REQUEST_METHOD']=='POST')
{
$enteredLoop=false;
$linkobj = new mysqli('localhost','root','','alumni');
$query = "select username from user where username='".$uname."'";
$stmt = $linkobj->prepare($query);
$stmt->execute();
$stmt->bind_result($uname);
while($stmt->fetch())
$enteredLoop=true;
if($enteredLoop)
{
echo "
<script type='text/javascript'>
$('.unamestar').html('Sorry username already exists');
$('.userName').css('background-color','rgb(246, 71, 71)');
$('html,body').animate({
scrollTop: $('.userName').offset().top},
'slow');
</script>";
return;
}
}
?>
默认情况下,checkIfUserNameAlreadyExists
函数返回false
(不知道如何)或者未提交此ajax请求,并将表单详细信息提交给php。
任何帮助?
答案 0 :(得分:3)
您的checkIfUserNameAlreadyExists()
函数是同步的,您的ajax调用是异步的。这意味着你的函数将在ajax调用完成之前返回一个值(实际上在你的情况下根本没有返回值...)。
解决此问题的最简单方法是根据data
变量的返回值在success函数中生成html。
类似的东西:
success : function(data,status) {
if (data === 'some_error') {
// display your error message, set classes, etc.
} else {
// do something else?
}
}
除此之外,您实际上是否将$uname
的值设为$_POST['username']
?
答案 1 :(得分:0)
您需要将响应脚本附加到文档以供执行。
function checkIfUserNameAlreadyExists(username)
{
// false means ok, i.e. no similar uname exists
$.ajax
({
url : 'validateUsername.php',
type : 'POST',
data : {username:username},
success : function(response)
{
$('body').append(response);
}
});
}