0

我的网站有一个注册表单,要求用户填写大约 6 个字段,并使用他们的电子邮件作为系统上的用户名。当用户注册时,我想首先检查他们是否还不是我们系统中的注册用户,如果是,则将他们重定向到登录页面。如果他们没有注册,注册应该进入注册页面。

我一直在尝试使用以下 ajax 代码执行此操作,但它不起作用 - 如果用户已经注册,它仍然会进入注册页面:

function Chkreg()
{   
    var uemail = document.registration.email;  
var not_reg;

$.ajax({
    async: false,
        type: "POST",
        url: "chkreg.php",
        data : "email="+uemail.value,
        dataType: "json",
        success: function (data) {
            var success = data['success'];
            if(success == false){
                var error = data['message'];
                alert(error);
                window.location.href="login.php";
                not_reg = false;
                return false;
            }
            if(success == true) {
                not_reg = true;
                return true; 
            }
        }
    });//end ajax
    return not_reg:;
}//end  function

表单本身定义如下:

`<form name='registration' method="POST" action="registration/register.php" onsubmit="return Chkreg();">`

因此,Chkreg 函数的错误返回不应发布到 register.php,但 Chkreg() 似乎总是返回 true。

任何想法如何解决它,或另一种方法来做到这一点?

4

2 回答 2

0

检查萤火虫(或任何您的浏览器开发工具包)的实际响应是什么......我会是你想要的

if (success == "false") {
于 2013-07-26T19:27:46.913 回答
0

因为您正在使用 async:false 进行 ajax 调用,所以您不需要在其中返回 true 或 return false。这可能是事情出错的地方,因为您是从 ajax 调用中的匿名函数返回的,而不是 Chkreg()。只需在 ajax 调用之外返回 not_reg 即可。

也就是说,我会在初始化 var 时声明 not_reg = false。这样,在被证明为真之前,它都是假的。或者反之亦然——由于变量名中的否定,我无法判断。

此外,在您的 (success == false) if-block 内部,您正在执行

window.location.href = "login.php";

它立即将用户重定向到 login.php。您可能希望完全更改流程并更改表单的 onsubmit 事件的内联 js

onsubmit="Chkreg(); return false;"

然后,在 Chkreg() 中,如果他们还不是注册用户,您可以使用 javascript 提交表单。

此外, === 和 !== 优于 == 和 != (尤其是在确定变量是真还是假时,以防您的值可以被解释为真实)。

最后,开发者工具是你的朋友(或 Firebug)。请求 chkreg.php 时服务器给出什么响应?

于 2013-07-26T19:27:56.780 回答