Php 使用ajax post实时验证用户名和电子邮件地址
我设置了一个简单的表单,并使用ajax+jquery检查有效的用户名(在DB中不存在)和电子邮件地址(有效的格式,在DB中不存在),如下所示Php 使用ajax post实时验证用户名和电子邮件地址,php,jquery,html,ajax,Php,Jquery,Html,Ajax,我设置了一个简单的表单,并使用ajax+jquery检查有效的用户名(在DB中不存在)和电子邮件地址(有效的格式,在DB中不存在),如下所示 <body> <div> <h5> Sign Up </h5> <hr /> <div> Username:<input type="text" size="32" name="membername" id="username"><div id="userna
<body>
<div>
<h5> Sign Up </h5>
<hr />
<div>
Username:<input type="text" size="32" name="membername" id="username"><div id="usernameStatus"></div><br />
Email:<input type="text" size="32" name="memberemail" id="memberemail"><div id="emailStatus"></div><br/>
Password:<input type="password" size="32" name="memberpwd"><br />
<button id="signup" disabled="true">Sign Up</button>
</div>
<script>
function IsEmailValidAndNew()
{
var pattern = new RegExp(/^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|
[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i);
var success=false;
$("#memberemail").change(function()
{
var email=$("#memberemail").val();
success=patter.test(email);
if(success)
{
$("#usernameStatus").html('<img align="absmiddle" src="loading.gif"/> Checking email...');
$.ajax(
{
type: "POST",
url:"regcheckemail.php",
data:"memberemail="+email,
success: function(msg)
{
$("#emailStatus").ajaxComplete(function(event, request, settings)
{
if(msg=="OK")
{
$("#memberemail").removeClass("object_error");
$("#memberemail").addClass("object_ok");
$(this).html('<img align="absmiddle" src="checkmark.png"/>');
success=true;
}
else
{
$("#memberemail").removeClass('object_ok');
$("#memberemail").addClass("object_error");
$(this).html(msg);
success=false;
}
}
);
}
}
);
}
else
{
$("#emailStatus").html("Provided email address is ill-formed");
$("#memberemail").removeClass('object_ok'); // if necessary
$("#memberemail").addClass("object_error");
success=false;
}
}
);
return success;
}
function IsUserAlreadyExist()
{
var success=false;
$("#username").change(function()
{
var usr=$("#username").val();
if(usr.length>=7)
{
$("#usernameStatus").html('<img align="absmiddle" src="loading.gif"/> Checking availability...');
$.ajax(
{
type: "POST",
url:"regcheckuser.php",
data:"username="+usr,
success: function(msg)
{
$("#usernameStatus").ajaxComplete(function(event, request, settings)
{
if(msg=="OK")
{
$("#username").removeClass("object_error");
$("#username").addClass("object_ok");
$(this).html('<img align="absmiddle" src="checkmark.png"/>');
success=true;
}
else
{
$("#username").removeClass('object_ok');
$("#username").addClass("object_error");
$(this).html(msg);
success=false;
}
}
);
}
}
);
}
else
{
$("#usernameStatus").html("The username should have at least 7 characters");
$("#username").removeClass('object_ok');
$("#username").addClass("object_error");
success=false;
}
});
return success;
}
$(document).ready(function()
{
if(IsEmailValidAndNew() && IsUserAlreadyExist())
{
$('button').find("#signup").attr("disabled","false");
}
else
{
$('button').find("#signup").attr("disabled","true");
}
});
</script>
</div>
</body>
注册
用户名:
电子邮件:
密码:
注册
函数IsEmailValidAndNew()
{
(3)w-++以下以下(以下::::::::::::::...[[[w-+[[[w-++[[[w-+[[[w-++))))))))))第十二(12)号(以下:::::::::::::(((“[[[[[\w-+\w-++\\10++++以下以下以下以下以下以下)))))))))))))))一((::::::::::::::::::::::::((((((((((((((()()()()()()()(((((((((((((()()()()()()()()()()()()()()()()()()()()()()(::::::::::::::::::::::::::d]{2}\|
(25[0-5]| 2[0-4]| 1[\d]|{2}{1,2}){2}}{2}}{(25[0-5]| 2[0-4][\d]| 1[\d]{2}}{1,2}}}}美元);;
var成功=false;
$(“#成员电子邮件”).change(函数()
{
var email=$(“#成员电子邮件”).val();
成功=模式测试(电子邮件);
如果(成功)
{
$(“#usernameStatus”).html(‘检查电子邮件…’);
$.ajax(
{
类型:“POST”,
url:“regcheckemail.php”,
数据:“memberemail=“+电子邮件,
成功:功能(msg)
{
$(“#emailStatus”).ajaxComplete(功能(事件、请求、设置)
{
如果(消息==“确定”)
{
$(“#成员电子邮件”).removeClass(“对象错误”);
$(“#成员电子邮件”).addClass(“对象确定”);
$(this.html(“”);
成功=真实;
}
其他的
{
$(“#成员电子邮件”).removeClass('object#u ok');
$(“#成员电子邮件”).addClass(“对象错误”);
$(this.html(msg);
成功=错误;
}
}
);
}
}
);
}
其他的
{
$(“#emailStatus”).html(“提供的电子邮件地址格式不正确”);
$(“#memberemail”).removeClass('object#ok');//如有必要
$(“#成员电子邮件”).addClass(“对象错误”);
成功=错误;
}
}
);
回归成功;
}
函数IsUserAlreadyExist()
{
var成功=false;
$(“#用户名”).change(函数()
{
var usr=$(“#用户名”).val();
如果(usr.长度>=7)
{
$(“#usernameStatus”).html(‘检查可用性…’);
$.ajax(
{
类型:“POST”,
url:“regcheckuser.php”,
数据:“用户名=”+usr,
成功:功能(msg)
{
$(“#usernameStatus”).ajaxComplete(函数(事件、请求、设置)
{
如果(消息==“确定”)
{
$(“#用户名”).removeClass(“对象#错误”);
$(“#用户名”).addClass(“对象#ok”);
$(this.html(“”);
成功=真实;
}
其他的
{
$(“#用户名”).removeClass('object#ok');
$(“#用户名”).addClass(“对象#错误”);
$(this.html(msg);
成功=错误;
}
}
);
}
}
);
}
其他的
{
$(“#usernameStatus”).html(“用户名应至少包含7个字符”);
$(“#用户名”).removeClass('object#ok');
$(“#用户名”).addClass(“对象#错误”);
成功=错误;
}
});
回归成功;
}
$(文档).ready(函数()
{
如果(IsEmailValidAndNew()&&IsUserAlreadyExist())
{
$('button').find('signup').attr(“disabled”,“false”);
}
其他的
{
$('button').find('signup').attr(“disabled”,“true”);
}
});
我用记事本编码,它不工作,我无法找出错误。我不知道你可能会使用什么好的工具来用javascript编写代码,这些工具有一些很棒的选项,比如嵌入式智能感知和调试功能。你的代码有几个问题
$.ajax()
调用的函数将在收到ajax响应之前完成。您需要重新构造它,以便从ajax成功回调中执行一些操作ajaxComplete()
函数-此时您已经在ajax成功处理程序中了,所以将代码直接放在包含成功函数的当前ajaxComplete()
中IsEmailValidAndNew()
和IsUserAlreadyExist()
一次,然后禁用或启用“注册”控件,但在此后的任何时候都不能重新启用或禁用它。您调用这些函数就像验证字段一样,但实际上它们所做的是在字段上设置更改处理程序,以便在用户实际更改字段之前,函数中的代码不会执行任何操作$(document).ready(function() {
var emailOK = false,
nameOK = false;
function setSubmitEnabling() {
$("#signup").prop("disabled", !(emailOK && nameOK));
}
setSubmitEnabling();
$("#username").change(function() {
var usr = $(this).val();
if (usr.length < 7) {
$("#usernameStatus").html("The username should have at least 7 characters");
$(this).removeClass('object_ok').addClass("object_error");
nameOK = false;
setSubmitEnabling();
} else {
// format seems OK, so do ajax call:
$("#usernameStatus").html('<img align="absmiddle" src="loading.gif"/> Checking availability...');
$.ajax({
type: "POST",
url:"regcheckuser.php",
data:"username="+usr,
success : function(msg) {
if(msg === "OK")
{
$("#username").removeClass("object_error")
.addClass("object_ok");
$("#usernameStatus").html('<img align="absmiddle" src="checkmark.png"/>');
nameOK = true;
}
else
{
$("#username").removeClass('object_ok')
.addClass("object_error");
$("#usernameStatus").html(msg);
nameOK = false;
}
// now update button state
setSubmitEnabling();
}
});
}
});
$("#memberemail").change(function() {
// basically the same thing as for the username field as shown above,
// except setting emailOK instead of nameOK, so I suggest you get the
// username part working first then come back to do this the same way
});
});