我知道我的问题在哪里,我就是想不出解决办法。
我有一个向导,基本上是一个5页的形式。在每个页面上,我做各种验证,如果验证匹配,则隐藏“页面”,并显示下一个页面。
$('#wizard-2 .continue').click(function() {
// Validation Here
$('#wizard-2').hide();
$('#wizard-3').show();
});
我的问题是其中一个验证函数需要一个ajax调用。
$.ajax({
// Misc stuff
success : function (bool) {
if (bool == 0) {
// Show Error
return false;
}
}
});
我需要做的是,脚本等待ajax调用完成,如果成功函数返回false,则需要停止脚本。
如果我使用的是一个真实的表单,我会将表单提交放在成功函数中,并防止在ajax之后直接执行默认操作。显然,这在这里是行不通的,因为在向导的最后一页完成之前,不应该提交表单。
有什么想法吗?
发布于 2011-04-05 23:37:36
您可以尝试在.ajax调用中设置async: false
,以防止调用异步发生。当然,这会减慢页面的速度,但也是一种选择。
另一种选择是将执行ajax调用的验证之后的内容放入成功调用的函数中。由于不知道它是什么,我不能勾勒出确切的选项,但可以肯定的是
$('#wizard-2').hide();
$('#wizard-3').show();
会是其中的一部分。
发布于 2011-04-05 23:39:39
我会尝试这样做:
1)定义一个函数来执行验证,该函数也需要回调函数类型的参数。
2)在click事件中,使用成功事件应该执行的函数调用验证函数。
类似于:
$('#wizard-2 .continue').click(function () {
// Validation Here
processWizard(function(){
$('#wizard-2').hide();
$('#wizard-3').show();
});
});
function processWizard(callback){
$.ajax({
// Misc stuff
success : function (bool) {
if (bool == 0) {
// Show Error
return false;
}
else{
callback();
}
}
});
}
发布于 2011-04-05 23:38:22
您可以将隐藏/显示代码放在回调函数中,以便成功调用AJAX吗?因此,只有当返回成功时,它才会在“表单”中显示下一页。
从本质上讲,AJAX是一个异步调用,因此当调用返回时发生某些事情的最佳方法是将其放入或从回调函数调用。
https://stackoverflow.com/questions/5554460
复制相似问题