2009-10-01 82 views
0

我遇到了jQuery验证插件和远程验证规则的问题,与jQuery表单插件结合使用。jQuery远程验证竞争条件

因此,我使用jQuery表单插件来截取表单子表单,如果验证失败,表单不会被提交。但是,如果远程规则已经被验证(等待服务器的答案),表单将被发送。

如果是在一切正常之前,或者在一切正常后,正如我对该表格的其他规则一样。但是如果我处于远程规则的GET中间,那么$('#myform').validate.form()将返回true,并且表单被提交。

因此,代码如下所示:

$('#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()的值之前等待完成,但那是我最后的手段。

回答

1

我认为你正确的思维,你必须使远程验证等待,因为它听起来像一个竞争条件

根据ajaxForm documentation您可以在标准$就参数传递了它

所以你可以尝试将async: false传递给ajaxForm。这将导致远程呼叫阻塞(同步)。

+0

把它放在ajaxForm选项上不起作用,因为在表单被提交之前调用processRequest。 但是这给了我一个想法,在远程规则上尝试'async:false',它也可以使用$ .ajax参数。 它可以工作,但并不是最优的,因为表单中的每个UI交互都会被阻止,直到验证结束,它似乎被冻结。 我宁愿诉诸于验证选项只有'onsubmit:true'。 – mtourne 2009-10-02 18:03:29