我正在对提交按钮点击事件进行ajax调用,以检查服务器端的字段验证。 当我得到验证失败时,ajax响应会给出正确的错误消息,返回false,并停止表单提交到操作URL。但是当我得到“成功”的回复时,表单仍未提交到操作url脚本。
这是在ajax响应之前执行return语句的情况吗?
还有为什么表格没有提交?
以下是代码:
<input type="submit" onclick="return validate();" name="submit" value="Proceed" />
<script type="text/javascript">
var flag=false;
function validate(){
$.ajax({
type:"POST",
url:"../chk.php",
data:datastring,
cache: false,
success: function (result) {
if(result.toString() == "success" ){
flag=true;
}
else{
$('#error').css('display', 'block');
$('#error').css('color','red');
$('#error').text(result.toString());
flag=false;
}
}
});
return flag;
}
</script>
答案 0 :(得分:3)
Ajax是异步的,所以你应该只将函数作为参数传递给函数,然后在ajax调用成功时执行它。
function my_callback() {
alert('done');
}
function validate(cb) {
$.ajax({
/* ... */
success: function() {
cb();
}
});
}
您传递给validate
的功能将在success
函数调用时执行。
答案 1 :(得分:3)
单向是
使用async : false
将async设置为false意味着您调用的语句必须在函数中的下一个语句被调用之前完成。
$.ajax({
type:"POST",
url:"../chk.php",
data:datastring,
cache: false,
async : false,
success: function (result) {
还有为什么要在ajax函数之外返回值,如果你没有使用async : false
$.ajax({
type:"POST",
url:"../chk.php",
data:datastring,
cache: false,
success: function (result) {
if(result.toString() == "success" ){
flag=true;
}
else{
$('#error').css('display', 'block');
$('#error').css('color','red');
$('#error').text(result.toString());
flag=false;
}
}
return flag;
});