为什么这个注册形式ajax mysql插入工作在chrome和safari但不是firefox?

时间:2012-03-11 00:39:05

标签: php javascript mysql ajax browser

我正在设置用户注册页面。它适用于Chrome和Safari,但不适用于Firefox(最新的Mac版本)。我在MAMP当地工作。

预期输出:

  • 点击提交按钮后发送Ajax请求。
  • 如果用户名可用,则将用户,密码,电子邮件插入mysql表。成功:隐藏的div“您已注册”出现。
  • 否则,隐藏的div“用户名不可用”

实际输出:

  • Chrome和Safari中的输出正如预期的那样。

  • 在Firefox中,表格中没有插入任何内容。没有隐藏的div显示,而是整个网页重新加载。

为什么下面的代码会产生这些不同的结果?

的Javascript

$(function() {
    $("#registersubmit").click(function() {
        var dataString = $("#registerclick").serialize();

        if (registerclick.user.value == "")
        {
            $('.error').show();
            registerclick.user.focus();
            return (false);
        }
        else
        {
            $.ajax({
                type: "POST",
                url: "register.php",
                data: dataString,
                success: function(reg) {
                    if (!reg)
                    {
                        $('.userexists').hide();
                        $('.error').hide();
                        $('.success').fadeOut(200).show();
                    }
                    else
                    {
                        $('.userexists').show();
                    }
                }
            });
        }
        return false;
    });
});

用于MYSQL插入的PHP

$user = ($_POST['user']);
$email = ($_POST['email']);
$time = time();
$password = ($_POST['password']);

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    include("config.php");

    $sql = "INSERT INTO users (username, password, email,timestamp) VALUES ('".mysql_real_escape_string($user)."','".mysql_real_escape_string($password)."', '".mysql_real_escape_string($email)."', '$time')";

    $result = mysql_query($sql);
    if (!$result)
    {
        die(mysql_error());
    }
}

假设已经进行了密码加密和mysql转义注意事项。

2 个答案:

答案 0 :(得分:1)

问题在于

if (registerclick.user.value == "")

由于我不知道的原因,Firefox显然无法解决这个问题。所以我用

替换了它
if (document.registerclick.user.value.length == "")

它现在有效!

答案 1 :(得分:0)

由于问题仅在于客户端部分,因此您需要检查客户端代码。 为firefox安装firebug并调试FF中的内容。

但是,我可能只是从头顶上给你一个想法。在最新的Firefox中(来自7 th 或8 th 版本),具有一些id的元素不会自动暴露给具有相同名称的全局变量。

我打赌,你没有自己声明registerclick变量。

因此,您需要声明此变量:

var registerclick = $('#registerclick').get(0);

或用registerclick替换代码中的forms.registerclick或稍微...但无论如何,我希望,你明白了。

PS:他 - 他,阅读评论。无论如何,我会留下我的答案。