2009-10-01 67 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