有没有人知道如何在不禁用异步的情况下使这个ajax功能正常工作? Asynx = false冻结一切......
<script type="text/javascript">
$(document).ready(function () {
$('#form5').bValidator();
});
function checkUsername(username){
var ret = false;
$.ajax({
type: 'POST',
url: 'checkuser.php',
sync: false, // Want to remove this
data: {'username':username},
success: function(data){
if(data == 'ok')
ret = true
}
});
return ret;
}
</script>
<form id="form5" method="post">
<p> Choose username:
<input type="text" data-bvalidator="checkUsername,required" data-bvalidator-msg="This username is not valid or already taken.">
</p>
<p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</p>
</form>
http://karmela.fsb.hr/~bmauser/bvalidator/documentation.html#serversidevalidation
答案 0 :(得分:-1)
你对ajax的概念缺乏了解。因为一个原因,它被称为“异步”
如果你删除async: false
(你应该,否则它不是真正的ajax),那么'checkuser.php'的请求是异步完成的。意味着脚本继续执行,同时,在“后台”中,发出了ajax请求。
当它完成时,则执行“成功”的回调功能(无论何时发生,你都无法确定)
因此,如果您希望只有在请求的ajax成功完成后才会发生某些事情,那么您应该将它放在“成功”函数中。
如果您删除async: false
,则执行顺序如下:
要了解同步和异步之间的区别,请执行以下两个示例:
示例1:
$.ajax({
type: 'POST',
url: 'checkuser.php',
async: false,
data: {'username':username},
success: function(data){
alert('1');
}
});
alert('2');
示例2:
$.ajax({
type: 'POST',
url: 'checkuser.php',
data: {'username':username},
success: function(data){
alert('1');
}
});
alert('2');
在“示例1”中,您将收到“1”,然后收到“2”的警告 但在“示例2”中,您将首先使用“2”然后使用“1”进行提醒 这是因为在'示例1'中,脚本在继续之前等待执行ajax请求以完成,但是在'示例2'中,脚本使ajax请求在“后台”中运行,同时继续其余的脚本。
希望这说清楚。