簡體   English   中英

AJAX Jquery PHP表單驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM