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(); }
        });

有什么想法或建议吗?

您调用 'async'(不同步 = 调用网络服务器并在获得答案时启动 'success' 函数)向网络服务器查询,不要等待答案! 只需检查 'err' 变量,首先 'submit' 它是默认值 'err = true',当您再次单击提交时 'err' 充满了来自 Web 服务器的答案,它显示了实际值。 如果您在本地 PC 网络服务器上进行测试,它应该会在 ~0.1 秒内生成答案,然后调用 'success' 函数!]。 非常愚蠢解决方案是:

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(); }

但它会冻结网站,直到它从网络服务器得到答复。


真正的jQuery解决方案: 1. 将 'change' 事件添加到您要验证的所有 'input' 字段。 2. 每个 'change' 事件执行 AJAX 以验证当前字段值。 3.将验证结果保存在'validationPasswordField = answerFromAjax'等变量中 4. 在 'submit' 事件中执行类似:

if(!validationPasswordField || !validationUsernameField || !validationAcceptedRegistrationRules)
    {
// if any validation failed (is 'false') block submit
    e.preventDefault();
    }