我正在尝试将ajax请求中的值返回到表单提交上的函数。
代码如下:
function validateEmail(){
if(email.val() == "")
{
$("#emailerror").html("Enter Email...");
return false;
}
else {
$.ajax({
type: "POST",
data: "email="+email.val(),
url:'emailcheck.php',
beforeSend: function(){
$("#emailerror").html("Checking Email...");
},
success: function(data){
if(data == "invalid")
{
$("#emailerror").html("Invalid Email");
return false;
}
else if(data != "0")
{
$("#emailerror").html("Email Already Exist");
return false;
}
else
{
$("#emailerror").html("OK");
return true;
}
}
});
}
}
在表单提交时,我正在调用该函数并检查来自ajax响应的返回值:
$('#myForm').submit(function(){
if(validateEmail())
{
alert('returning true');
return true;
}
else
{
return false;
}
});
但是,当返回值为“真实”时,代码不会被执行。函数validateEmail()返回false。
请帮我弄清楚我哪里出错..
提前致谢。
答案 0 :(得分:0)
if(data == "invalid")
{ // id data = invalid it good
$("#emailerror").html("Invalid Email");
return false;
}
else if(data != "0") //if data == good it work :) it is error
{
$("#emailerror").html("Email Already Exist");
return false;
}
else
{
$("#emailerror").html("OK");
return true;
}
也许是这样的:
if(data == "invalid")
{ // id data = invalid it good
$("#emailerror").html("Invalid Email");
return false;
}
else if(data == "good") //if data == good it work :) it is error
{
$("#emailerror").html("OK");
return true;
}
else
{
$("#emailerror").html("Email Already Exist");
return false;
}
答案 1 :(得分:0)
AJAX中的“A”代表“异步”。
在else
的{{1}}分支中,您正在向validateEmail
发起异步请求。 emailcheck.php
将在之前返回您的PHP文件响应;然后你的validateEmail
脚本会响应,jQuery会调用你的emailcheck.php
回调,但没有人会注意它返回的内容。就表单验证而言,结果是success
看起来像这样:
validateEmail
您可以尝试$.ajax
的function validateEmail() {
if(email.val() == "") {
$("#emailerror").html("Enter Email...");
return false;
}
else {
// Your $.ajax() might as well not even be here as
// validateEmail will return before $.ajax() gets a
// response from emailcheck.php
return;
}
}
选项,或者重写所有逻辑,以便能够等待异步请求返回。
此外,async:false
的第二个分支不会返回validateEmail
,它根本不会返回任何内容,但仍然不是真正的值。
答案 2 :(得分:0)
我认为问题在于,您在调用validateEmail()时将未定义为返回值。 这是因为您的ajax请求是异步完成的,并且validateEmail()函数在获得结果之前退出。一个解决方案(我认为不好)是在ajax请求中将选项async设置为false。
$.ajax({
type: "POST",
data: "email="+email.val(),
url:'emailcheck.php',
async: false,
beforeSend: function(){
$("#emailerror").html("Checking Email...");
}
否则我会推荐这个。无论触发你的提交电话,你都可以触发validateEmail(),然后从那里调用提交。
validateEmail(); //Instead of trigger submit you call this function.
function validateEmail(){
if(email.val() == "")
{
$("#emailerror").html("Enter Email...");
return false;
}
else {
$.ajax({
type: "POST",
data: "email="+email.val(),
url:'emailcheck.php',
beforeSend: function(){
$("#emailerror").html("Checking Email...");
},
success: function(data){
if(data == "invalid")
{
$("#emailerror").html("Invalid Email");
return false;
}
else if(data != "0")
{
$("#emailerror").html("Email Already Exist");
return false;
}
else
{
$("#emailerror").html("OK");
$('#myForm').submit(); //Here you trigger submit.
return true;
}
}
});
}
}
可能你有其他验证功能,但我认为你也可以管理它。