所以我有一個表單,點擊提交後,我想在提交之前進行一些驗證。我覺得挺直觀的。因此,我在表單上設置了一個提交處理程序,並希望它能夠執行AJAX檢查,並在完成後,如果一切正常,請繼續並像往常一樣提交。jQuery:AJAX完成時提交表單
我嘗試這樣做,它失敗很明顯的原因:
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
return true;
}
});
return false;
checkUsername
是$.post
,而checkTitle
和checkMessage
只是檢查,如果任何字符是在這些領域。每個功能相對驗證userValid
,titleValid
和messageValid
,將這些值設置爲true或false。兩個輸入字段和文本區域都與每個相關功能相關聯,所以即使在用戶單擊提交之前,表單也正在驗證。
很顯然,在最後返回false的情況下,表單將永遠不會提交。但是,我原來在done之外有有效的檢查(當前返回false是),並且如果用戶輸入了3個有效項目,然後擦除了一個字段並且沒有離開/模糊,並且直接點擊提交,它仍然會提交,因爲AJAX仍在處理中,這些字段沒有經過第二輪檢查。
本質上,我希望表單等待提交,直到AJAX完成。但是submit()
函數將在AJAX完成之前處理它的返回,並且我不能完成它,因爲我需要AJAX觸發提交。本質上,一個捕獲22.
我想出了一些東西,我覺得這是一個混亂的方式做到這一點,但目前我能想到的唯一方法,並可以使用建議,如果這是唯一的方法做它,或我有什麼其他選擇。我知道我可以通過AJAX提交表單,但我希望看到有哪些選項可用。這是凌亂的方法:
if (validated) return true;
else {
$form = $(this);
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
validated = true;
$form.submit();
}
});
return false;
}
在這種情況下,存在僅由AJAX設置一個主驗證變量,並在完成後該系統重新提交。