[英]AJAX Jquery PHP Validation of Form
以下jQuery代碼沒有運氣。 假設在提交時驗證表單輸入。 密碼設置正確。 第一次提交時,err是正確的。 第二次提交(密碼不變),err正確設置為false。
var err = true;
$( "#signupform" ).submit(function( event ) {
var span_supassword = $('#span_supassword');
var password = $("#supassword").val();
$.ajax({
url: '/apps/ajax/signupvalidate.php',
data: 'action=checkpassword&password=' + password,
dataType: 'json',
type: 'post',
success: function (j) {
if (j.passwordmsg) {
err = true;
span_supassword.html(j.passwordmsg);
}
else { err = false; }
}
});
if (err) { event.preventDefault(); }
});
有什么想法或建議嗎?
您調用“異步”(不同步=調用Web服務器,並在獲取答案時啟動“成功”功能)查詢到Web服務器,而不必等待答案! 只需檢查“ err”變量,然后首先“提交”,它是默認的“ err = true”,當再次單擊提交時,“ err”充滿了來自網絡服務器的答案,並且顯示了實際價值。 如果您在本地PC Web服務器上進行測試,它將在約0.1秒內生成答案,然后調用“成功”功能!]。 非常愚蠢的解決方案是:
err = null; // delete value every call
var span_supassword = $('#span_supassword');
...(jQuery代碼)...
while(err == null)
{// freez web browser until you get answer from server
}
if (err) { event.preventDefault(); }
但它將凍結網站,直到從Web服務器獲得答案為止。
真正的jQuery解決方案:1.將“ change”事件添加到要驗證的所有“輸入”字段中。 2.每個“更改”事件均執行AJAX以驗證當前字段值。 3.將驗證結果保存在類似“ validationPasswordField = answerFromAjax”的變量中。4.在“ submit”事件中,執行以下操作:
if(!validationPasswordField || !validationUsernameField || !validationAcceptedRegistrationRules)
{
// if any validation failed (is 'false') block submit
e.preventDefault();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.