jQuery远程验证竞争条件
我对jQuery验证插件和与jQuery表单插件结合使用的远程验证规则有问题 因此,我使用jQuery表单插件拦截表单提交,如果验证失败,表单将不会提交。但是,如果已验证远程规则(等待服务器的答复),则仍将发送表单 如果是在之前或之后,一切都正常,就像我对表单的其他规则一样。但是如果我在远程规则的get中,那么$[(`yyMyFrue)] .Valual.Fuff.For()将返回true,并且提交表单。 代码如下所示:jQuery远程验证竞争条件,jquery,validation,race-condition,Jquery,Validation,Race Condition,我对jQuery验证插件和与jQuery表单插件结合使用的远程验证规则有问题 因此,我使用jQuery表单插件拦截表单提交,如果验证失败,表单将不会提交。但是,如果已验证远程规则(等待服务器的答复),则仍将发送表单 如果是在之前或之后,一切都正常,就像我对表单的其他规则一样。但是如果我在远程规则的get中,那么$[(`yyMyFrue)] .Valual.Fuff.For()将返回true,并且提交表单。 代码如下所示: $('#myform').ajaxForm({ beforeSubm
$('#myform').ajaxForm({
beforeSubmit: processRequest,
success: processResponse,
dataType: 'json'
});
$('#myform').validate({
rules: {
onkeyup: false,
title: {
required: true,
remote: { url: 'check_title.php' }
}
}
});
function processRequest(formData, jqForm, options) {
if (!$('#myform').validate.form()) {
// cancel the form submition
return false;
}
// do some stuff
return true;
}
是否有办法强制等待挂起的远程验证
或者,我可以在验证规则中只保留“onsubmit:true”,这样我就可以确保验证只在提交时进行,并在返回validate()的值之前等待完成。form(),但这是我最后的选择。我想你认为必须让远程验证等待是正确的,因为这听起来像是比赛条件 根据需要,您可以传入标准的$.ajax参数
因此,您可以尝试将
async:false
传递到ajaxForm中。这将导致远程调用阻塞(同步)。将其放在ajaxForm选项上不起作用,因为processRequest在表单提交之前就被调用了。但这让我想到在远程规则上尝试“async:false”,它也可以接受$.ajax参数。它可以工作,但不是最优的,因为表单中的每个UI交互都会被阻止,直到验证结束,它似乎被冻结了。我宁愿对validate选项只使用“onsubmit:true”。