我有一个我的网站注册表格,要求用户填写~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。
有什么办法解决这个问题吗?或者另一种解决办法呢?
发布于 2013-07-26 19:27:56
因为您正在使用异步: false执行ajax调用,所以不需要在其中返回true或返回false。这可能是事情出错的地方,因为您是从ajax调用中的匿名函数返回的,而不是Chkreg()。只需在ajax调用之外返回not_reg即可。
这就是说,在初始化var时,我会声明not_reg = false。这样在被证明是真的之前都是假的。或者--反之亦然--我不知道,因为变量名中的否定。
此外,在您的(成功== false) if-块内部,您正在执行
window.location.href = "login.php";它立即将用户重定向到login.php。您可能希望完全更改流,并更改窗体onsubmit事件的内联js。
onsubmit="Chkreg(); return false;"然后,在Chkreg()内部,如果不是注册用户,可以使用javascript提交表单。
此外,===和!==比==和!=更可取(特别是在确定变量为true或false时,如果您的值可以被解释为真实的话)。
最后,开发工具是您的朋友(或者Firebug)。当请求chkreg.php时,服务器会给出什么响应?
发布于 2013-07-26 19:27:46
检查使用firebug (或您的浏览器开发工具包)的实际响应是什么,....I将是您想要的
if (success == "false") {https://stackoverflow.com/questions/17888860
复制相似问题