0

我正在设置一个注册表单。此表单有 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”。

有趣的是,只要此表单中存在其他错误,此代码段就可以正常工作-例如用户名。“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>
4

2 回答 2

1

也许它是由您尝试匹配的不同输出类型引起的......

首先,将您的 PHP 输出更改为

echo json_encode($final ? true : false);

然后,要使用 JSON,我会将此行添加到 ajax 调用方法中,以确保...

$.ajax({
    type: 'POST',
    dataType:'json',
    ...
    success: function(msg)
    {
        if(msg!==true){
            is_error = true;
        }
    }
});
于 2012-11-22T14:13:05.603 回答
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();
        }
    }
 });
于 2012-11-22T14:14:46.210 回答