我需要一些指导,因为我在这里真的很疯狂。
我已经用php / js / ajax创建了代码来检查提交时是否存在电子邮件地址。
所以我测试了ajax并返回了正确的值。 (通过萤火虫检查)
Either 1 for user exists
or 2 for user doe not exist.
现在我添加了一个警告框来检查值,由于一些奇怪的原因,它总是显示值1! (即使ajax值为2)
function validateForm() {
var x3=document.forms["newuser"]["email"].value;
//Check if username exists.
$.post(
"http://...check_user_exists.php",
{
x3 : x3 //user email
},
function(data) {
email_check = parseInt((data.email_exists),10);
}
);
//Additional Checks
if (email_check = 1) {
$("#form_status").fadeIn("slow");
$("#form_status").text("Email Address Taken.");
alert(email_check);
return false;
}
if (email_check = 2) {
$("#form_status").fadeIn("slow");
$("#form_status").text("Email ok.");
alert(email_check);
return true;
}
more validation checks....
大家好,再次......谢谢你的善意指导。 首先,我想道歉,因为我对此很新... 我已经向前迈进了一步,但坚持到最后一部分并且不确定如何继续。
因此,表单现在验证表单元素并检查电子邮件以查看它是否存在。 我留下的唯一问题是,如果电子邮件值正常,则表单不会处理。 有没有办法使用ajax回调函数将提交值设置为true?
<form name="newuser" id="form" method="post" action="do_new_user.php" onsubmit="return validateForm()">
function validateForm()
{
var x=document.forms["newuser"]["name"].value;
var x2=document.forms["newuser"]["surname"].value;
var x3=document.forms["newuser"]["email"].value;
var x4=document.forms["newuser"]["password1"].value;
var x5=document.forms["newuser"]["password2"].value;
if (x==null || x=="")
{
$("#form_status").fadeIn("slow");
$("#form_status").text("Please enter your name.");
return false;
}
//more validation.....
//Check if username exists.
$.post("http://ryangosden.com/breadcrumbs/check_user_exists.php",
{
x3 : x3
} ,
function(data)
{
var obj = jQuery.parseJSON(data);
if (obj.email_exists == 1)
{
$("#form_status").fadeIn("slow");
$("#form_status").text("Email Address Taken.");
}
if (obj.email_exists == 2)
{
$("#form_status").fadeIn("slow");
$("#form_status").text("Email ok.");
validateForm(true);
}
});
return false;
}
再次感谢所有人。
答案 0 :(得分:5)
您没有进行比较,只是将1
分配给email_check
if (email_check = 1)
但应该是
if (email_check == 1)
= is an assignment operator
== is a comparison operator
=== is a strict comparison operator
答案 1 :(得分:1)
为什么要分配值而不是比较它。
=指定值
==比较值
if (email_check = 1)
你应该这样做:
if (email_check == 1)
和
if (email_check == 2)
答案 2 :(得分:0)
回调函数是异步调用的。因此,您无法以您期望的方式调用validateForm()
,与服务器联系,解析结果,并返回true
或false
。实际发生的是$post( ...
代码运行但不等待响应。相反,它会立即继续执行代码if (email_check = 1) { ...
(应该有==
而不是=
),而无需等待POST响应。只有在收到响应后,才会通过回调函数实际设置email_check
,但validateForm()
的剩余部分已经完成。
相反,无论您打算如何处理返回值,都必须在回调函数中进行。也就是说,替换
function(data)
{
email_check = parseInt((data.email_exists),10);
});
与
function(data)
{
email_check = parseInt((data.email_exists),10);
alert("In callback: email_check = "+email_check);
if (email_check == 1) {
$("#form_status").fadeIn("slow");
$("#form_status").text("Email Address Taken.");
}
if (email_check == 2) {
$("#form_status").fadeIn("slow");
$("#form_status").text("Email ok.");
}
});
您使用validateForm()
的返回值执行的任何其他操作也应该包含在回调函数中。