我正在设置注册表。 此表单有7个字段正在测试以进行验证。 其中2个有特殊验证;我有一个对PHP类的Ajax调用,我向这个类发送一个email_string,测试,如果我的数据库中已存在这样的电子邮件(避免重复)。
params = {};
params['source'] = 'checkEMail';
params['email'] = email
$.ajax({
type: 'POST',
url : 'some_class.php',
data : params,
success: function(msg)
{
if(msg > 0) /* email exists */
is_error = true;
}
});
在我的PHP课程中,我得到了类似的东西:
$final = mysql_fetch_assoc(foo);
echo ($final) ? 1 : 0;
我正在测试数据,实际上 - 如果电子邮件存在,我会收到'1',如果不存在,我会收到'0'。
有趣的是,此代码段工作正常 AS LONG AS 此表单中存在其他错误 - 就像空用户名一样。 “is_error”是一个布尔值,在脚本开头设置为false,如果一个验证失败,则为true。 然后,最后,我得到了这个:
if(is_error)
{
error.show();
error.empty().append('some html foo');
}
else
{
$('form').submit();
error.empty().hide();
}
那么尽管is_error设置为true,我怎么能发送表单呢? 我能想到的唯一原因是在“is_error”正在测试之前发送表单 - 但是表单的发送位于脚本的最底层。
哦,我这样称呼它:
<script type="text/javascript">
$("#reg_submit").click(function(event) {
event.preventDefault();
checkReg();
});
</script>
答案 0 :(得分:1)
可能是由您尝试匹配的不同输出类型引起的......
首先,将PHP输出更改为
echo json_encode($final ? true : false);
然后,为了使用JSON,我会将此行添加到ajax调用方法,以确保...
$.ajax({
type: 'POST',
dataType:'json',
...
success: function(msg)
{
if(msg!==true){
is_error = true;
}
}
});
答案 1 :(得分:1)
而不是在脚本末尾有if(is_error){
部分,我建议你在ajax请求完成时这样做以避免竞争条件:
$.ajax({
type: 'POST',
url: 'some_class.php',
data: params,
success: function(msg) {
if (msg > 0) /* email exists */
is_error = true;
},
complete: function() {
if (is_error) {
error.show();
error.empty().append('some html foo');
} else {
$('form').submit();
error.empty().hide();
}
}
});