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