繁体   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