以下是我编写的一个小jQuery代码,用于检查数据库中是否存在用户名和电子邮件。如果他们这样做,我返回false以防止提交表格。
我计划的方式是这样的。 在其他东西有效后提交。我使用ajax请求来检查用户名是否存在。如果是,我会以同样的方式检查电子邮件。
这就是问题所在。我无法在ajax回调中设置everythingIsOK。所以,如果一切正常,我都无法回归。
有什么想法吗?
$(loginForm).submit(function(){
var = everythingIsOK = false;
if((loginForm).valid()){
$.get("/ajax/usernameAvailable", {username: $("#username").val()}, function(data){
if(data.available){
$.get("/ajax/emailAvailable", {email: $("#email").val()}, function(data){
if(data.available){
everythingIsOK = true;
return true;
}else{
$("#notAvailable").html("Email already exists.").show().fadeOut(8000);
return false;
}
}, "json");
}else{
$("#notAvailable").html("This is username already exist.").show().fadeOut(8000);
}
}, "json");
}
return everythingIsOK;
});
答案 0 :(得分:3)
如果 ok,你可以调用native form.submit()
函数(不再触发这个处理程序),并且总是从jQuery处理程序返回false
,就像这样:
loginForm.submit(function(){
var form = this;
if(!loginForm.valid()) return false;
$.get("/ajax/usernameAvailable", {username: $("#username").val()}, function(data){
if(data.available){
$.get("/ajax/emailAvailable", {email: $("#email").val()}, function(data){
if(data.available) {
form.submit();
}else{
$("#notAvailable").html("Email already exists.").show().fadeOut(8000);
}
}, "json");
}else{
$("#notAvailable").html("This is username already exist.").show().fadeOut(8000);
}
}, "json");
return false;
});
当检查完成(从服务器返回)时,您将收到错误,或者表单将提交并继续。此外,我更改了上面的$(loginForm
以便不再被包裹,通过if((loginForm).valid()){
判断(如果这不是错误),它已经一个jQuery对象。
答案 1 :(得分:2)
你的第二行有语法错误:
var = everythingIsOK = false;
应该是:
var everythingIsOK = false;
可能是问题吗?
答案 2 :(得分:1)
var = everythingIsOK = false;
应该是
var everythingIsOK = false;
我猜。也许这是第一个问题?
答案 3 :(得分:1)
而不是var = everythingIsOK = false;
它应该是var everythingIsOK = false;
范围方面,如果不起作用,您可以将其更改为对象var status = { everythingIsOK: false };
的属性并更改该属性的值。
但是,您需要始终从提交处理程序返回false,因为正如Nick指出的那样,您的get
调用是异步的 - 所以他们很可能不会及时完成除非您这样做,否则不要提交表单。 (听取他的建议并从内部get
函数的回调中手动提交提交。)