简体   繁体   English

为什么此注册表单可以在chrome和safari中使用ajax mysql插入,但不能在Firefox中使用?

[英]Why does this registration form ajax mysql insert work in chrome and safari but not firefox?

I am setting up a user registration page. 我正在建立一个用户注册页面。 It works in Chrome and Safari, but not Firefox (latest Mac versions). 它适用于Chrome和Safari,但不适用于Firefox(最新的Mac版本)。 I am working locally on MAMP. 我在本地从事MAMP工作。

Expected Output: 预期产量:

  • Ajax request is sent after submit button click. 单击提交按钮后发送Ajax请求。
  • If username is available, user, password, email are inserted into mysql table. 如果用户名可用,则将用户,密码,电子邮件插入mysql表。 Success: hidden div "You are registered" appears. 成功:显示隐藏的div“您已注册”。
  • Else, hidden div "Username unavailable appears" 否则,隐藏的div“出现用户名不可用”

Real Output: 实际输出:

  • Output is as expected in Chrome and Safari. Chrome和Safari中的输出与预期的一样。

  • In Firefox, nothing is inserted in the table. 在Firefox中,表中没有任何内容。 No hidden divs show up, instead, the entire webpage reloads. 没有隐藏的div出现,而是整个网页重新加载。

Why is the code below producing these different results? 为什么下面的代码会产生这些不同的结果?

Javascript Java脚本

$(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;
    });
});

PHP for MYSQL Insert PHP for MYSQL插入

$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());
    }
}

Assume that password encryption and mysql escape precautions have been made. 假定已经进行了密码加密和mysql逃逸预防措施。

The problem was with 问题出在

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

Firefox apparently can't handle this for reasons I don't know. Firefox显然由于我不知道的原因而无法处理此问题。 So I replaced it with 所以我用

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

and it now works! 现在可以使用了!

Since problems lies in client part only, you need to inspect client code. 由于问题只存在于客户端部分,因此您需要检查客户端代码。 Install firebug for firefox and debug what is broken in FF. 为firefox安装firebug并调试FF中损坏的内容。

I may give you one idea just from the top of my head, though. 不过,我可能只是从头顶上给您一个想法。 In latest Firefoxes (from 7 th or 8 th version) elements with some id are not automatically exposed into global variables with the same name. 在最新的Firefoxes(从 7或 8版)的一些元素id不会自动暴露到具有相同名称的全局变量。

I bet, you didn't declared registerclick variable by yourself. 我敢打赌,您没有亲自声明registerclick变量。

Therefore you need either to declare this variable: 因此,您需要声明以下变量:

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

or replace registerclick in your code with forms.registerclick or somewhat... anyway, I hope, you get the idea. 或者将您的代码中的registerclick替换为forms.registerclick或某种程度上...无论如何,我希望您能想到。

PS: He-he, read comments. PS:呵呵,阅读评论。 Anyway, I'll leave my answer. 无论如何,我会留下我的答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM