[英]Ajax return false to form
嗨,我想在用户注册我的网站时检查我的数据库,以确保他们选择的用户名不存在,并且是否告知他们。 我的以下代码无法正常运行,尽管无论我做什么,而且表单始终提交,ajax中的返回值似乎都不会返回到我的表单中。 为什么会这样呢? 感谢您的任何帮助
HTML
<form name="signup" action="Test1.php" onsubmit="return checkUser();" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>
使用Javascript
<script type="text/javascript" src="jquery-1.7.1.min.js"/></script>
<script type="text/javascript">
function checkUser(){
var userV = document.signup.user.value;
$.ajax({
url: "Test.php",
type: "POST",
data: {user:userV},
success: function (response) {
if(response=="0"){
//Username already exists notify user
return false;
}else{
return true;
}
}
});
}
</script>
test.php的
<?PHP
$user = $_POST['user'];
if($user=="test"){
die("0");
}else{
die("1")
}
?>
Test1.php
<?PHP
echo "Form submitted";
?>
您将return
值放在ajax调用的success
回调中,其执行被延迟直到服务器应答为止。
onsubmit="return checkUser();"
在checkUser()
函数中期望true
值或false
值:
function checkUser(){
if( stuff )
return true;
else
return false;
}
无论如何,这是一个总体上不好的方法,因为它依赖于侵入性javascript。 更好的解决方案是将所有客户端逻辑移出标记:
HTML
<form name="signup" action="Test1.php" method="get">
<label for="_user">Username:</label><input type="text" name="user" id="_user"/>
<input type="submit" value="Submit" />
</form>
JS
<script>
// wrapping the code in a $(function(){ ... }); call delays its execution till document is loaded
$(function(){
$('form[name="signup"]').on('submit', function(event){
// this prevents browser from actually following form url
event.preventDefault();
// a reference to the form to get used inside ajax callback
var form = this;
$.ajax({
url: $(form).attr('action'),
type: "POST",
data: {user:$(form.user).val()},
success: function (response) {
if(response=="0"){
alert('User exists!');
}else{
alert('User does not exist!');
}
}
});
});
});
</script>
警报将是向用户发送的正确消息,或者是更复杂的验证-仅出于示例目的。
您在回调中返回false
,也就太“迟了”,因为在完成请求后将调用它。 考虑添加一个显式的e.preventDefault()
或return false
到您的函数。 当前,它将返回undefined
,就像您在“ inner”函数中定义了return
语句一样。
当然,您将需要手动导航到目标页面。
或将$.ajax()
调用的async
参数显式设置为false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.