Ajax向表单返回false
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
,正如您在"内部"函数中定义的return
语句一样。
当然,您需要手动导航到目标页面。
或者将$.ajax()
调用的async
参数显式设置为false
。
相关文章:
- Array.every返回false,而不是类型error
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 为什么当我在数组上测试regex时,它会返回false
- 过滤器返回true或false
- 检查文本区域是否为空总是返回false
- PHP strtotime()为JavaScript日期字符串返回false
- onsubmit返回false,但submit仍然执行
- 这个代码会返回false吗
- Ajax向表单返回false
- 表单验证JavaScript编号总是返回false
- 使用!而in运算符在应该为true时返回false,为什么
- 如何使以下函数返回true或false
- jQuery.is(':checked')总是返回false
- 为什么 javascript 返回对象位置 true 或 false
- Javascript 下划线每个总是返回 false
- 提交返回 false 总是在 jquery 中
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 如何使用angular或javascript在基于true/false返回的html中显示值
- Javascript:奇怪的行为' empty string '和' false '返回空字符串
- NaN是伪造的吗?为什么NaN===false返回false