Javascript 无法获取对函数的ajax回调
我有一个表格供用户注册新帐户。我使用jquery+ajax检查表单提交时电子邮件地址的可用性。在Jquery代码中,我使用了e.preventDefault();如果出现任何错误,则阻止表单提交。我尝试了电子邮件输入中的现有电子邮件地址,然后单击提交表单。它允许表单提交。它不应该这样做,因为ajax reponseText返回true意味着数据库中已经存在电子邮件地址 谁能告诉我如何修复我的代码,这样如果ajax响应返回true,它将阻止表单提交并显示错误 我试着阅读和跟随,但在多次尝试后失败了 这是我的表格:Javascript 无法获取对函数的ajax回调,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个表格供用户注册新帐户。我使用jquery+ajax检查表单提交时电子邮件地址的可用性。在Jquery代码中,我使用了e.preventDefault();如果出现任何错误,则阻止表单提交。我尝试了电子邮件输入中的现有电子邮件地址,然后单击提交表单。它允许表单提交。它不应该这样做,因为ajax reponseText返回true意味着数据库中已经存在电子邮件地址 谁能告诉我如何修复我的代码,这样如果ajax响应返回true,它将阻止表单提交并显示错误 我试着阅读和跟随,但在多次尝试后失败了
<form role="form" method="post" id="signupForm" action="index.php?view=signup-gv">
<div class="col-xs-6 border-right">
<div class="form-group">
<label for="exampleInputEmail1">Full Name</label>
<input type="text" class="form-control" id="regname" name="regname" placeholder="Full Name">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Email Address</label><span id="emailcheck"></span>
<input type="email" class="form-control" id="regemail" name="regemail" placeholder="Enter email">
</div>
</div>
<div class="form-group col-xs-6">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="regpass" name="regpass" placeholder="Password">
</div>
<button style="position:relative; left: 15px; top: 10px;" class="btn btn-default" name="register" id="register">Register</button>
</form>
全名
电子邮件地址
密码
登记
这里是我的jquery代码:
$(document).ready(function(){
$('#regname').focus();
$('#signupForm').submit(function(e) {
var regname = $('#regname');
var regemail = $('#regemail');
var regpass = $('#regpass');
var register_result = $('#register_result');
register_result.html('Loading..');
if(regname.val() == ''){
regname.focus();
register_result.html('<span class="errorss"> * Full name can not be blank</span>');
e.preventDefault();
}
else if ($.trim(regemail.val()).length == 0) {
regemail.focus();
register_result.html('<span class="errorss">* Email address can not be blank</span>');
e.preventDefault();
}
else if(regpass.val() == ''){
regpass.focus();
register_result.html('<span class="errorss">* Password can not be blank</span>');
e.preventDefault();
}
emailCheck().done(function(r){
if(r){
$('#regemail').focus();
$('#register_result').html('<span class="errorss"> This email address is already existed. Please choose another one </span>');
e.preventDefault();
}
});
});
});
function emailCheck() {
var regemail = $('#regemail');
var emailcheck = $('#emailcheck');
emailcheck.html('');
var UrlToPass = {regemail:regemail.val()} ;
$.ajax({
type : 'POST',
cache: false,
data : UrlToPass,
url : 'emailcheck.php',
success: function(responseText){
if(responseText == 0){
return false; // good to go
}
else{
emailcheck.html('<span class="errorss"> This email is existed.</span>');
return true; // This email is registered. Please try different one
}
}
});
$(文档).ready(函数(){
$('#regname').focus();
$(“#注册表”).submit(函数(e){
var regname=$('#regname');
var regemail=$(“#regemail”);
var regpass=$(“#regpass”);
var register_result=$(“#register_result”);
register_result.html('load..');
如果(regname.val()=''){
regname.focus();
register_result.html(“*全名不能为空”);
e、 预防默认值();
}
else if($.trim(regemail.val()).length==0){
regemail.focus();
register_result.html(“*电子邮件地址不能为空”);
e、 预防默认值();
}
如果(regpass.val()=''){
regpass.focus();
register_result.html(“*密码不能为空”);
e、 预防默认值();
}
emailCheck().done(函数(r){
if(r){
$('#regemail').focus();
$('#register_result').html('此电子邮件地址已存在。请选择另一个');
e、 预防默认值();
}
});
});
});
函数emailCheck(){
var regemail=$(“#regemail”);
var emailcheck=$(“#emailcheck”);
emailcheck.html(“”);
var UrlToPass={regemail:regemail.val()};
$.ajax({
键入:“POST”,
cache:false,
数据:UrlToPass,
url:'emailcheck.php',
成功:函数(responseText){
if(responseText==0){
return false;//很好
}
否则{
emailcheck.html('此电子邮件已存在');
return true;//此电子邮件已注册。请尝试其他电子邮件
}
}
});
}您将自己与同步和异步功能混淆。ajax函数进行异步调用并在其回调中返回输出。您正在尝试将异步函数包装到普通函数中,并期望它同步运行 函数在Ajax调用接收其输出之前返回。使用 异步:false
$.ajax({
type : 'POST',
cache: false,
async: false,
data : UrlToPass,
有关详细信息,请参阅以下内容:
首先,您没有从emailCheck()函数返回任何内容,但您使用它时,就像它返回承诺对象一样 所以
$(文档).ready(函数(){
$('#regname').focus();
$(“#注册表”).submit(函数(e){
var regname=$('#regname');
var regemail=$(“#regemail”);
var regpass=$(“#regpass”);
var register_result=$(“#register_result”);
register_result.html('load..');
//阻止表单提交
e、 预防默认值();
如果(regname.val()=''){
regname.focus();
register_result.html(“*全名不能为空”);
}else if($.trim(regemail.val()).length==0){
regemail.focus();
register_result.html(“*电子邮件地址不能为空”);
}else if(regpass.val()=''){
regpass.focus();
register_result.html(“*密码不能为空”);
}否则{
emailCheck().done(函数(r){
if(r){
$('#regemail').focus();
$('#register_result').html('此电子邮件地址已存在。请选择另一个');
}否则{
$(“#注册表单”)[0]。提交();
}
});
}
});
});
函数emailCheck(){
var regemail=$(“#regemail”);
var emailcheck=$(“#emailcheck”);
emailcheck.html(“”);
var UrlToPass={
regemail:regemail.val()
};
var deferred=jQuery.deferred();
$.ajax({
键入:“POST”,
cache:false,
数据:UrlToPass,
url:'emailcheck.php',
成功:函数(responseText){
if(responseText==0){
延迟。解决(错误);
}否则{
emailcheck.html('此电子邮件已存在');
延迟。解决(正确);
}
},
错误:函数(){
拒绝();
}
});
延迟返回。承诺();
}
使用return false,使用preventDefault()尝试了这个方法,但我仍然理解异步和同步。这就是为什么我尝试本文中的解决方案:。但从技术上来说,我不知道我所做的是否正确?所以,如果你发现这是一个愚蠢的错误,请指出它,并请如何修复它为我的情况。非常感谢您在emailcheck中的ajax调用中设置您的async:falsefunction@AbhisekMalakar为什么会有人这样做?我从firebug得到这个错误:TypeError:deferred.pomise不是函数?@GiangNguyen a typoreturn deferred.promise()你帮我节省了很多时间。现在可以了。非常感谢你!
$(document).ready(function () {
$('#regname').focus();
$('#signupForm').submit(function (e) {
var regname = $('#regname');
var regemail = $('#regemail');
var regpass = $('#regpass');
var register_result = $('#register_result');
register_result.html('Loading..');
//prevent the form submit
e.preventDefault();
if (regname.val() == '') {
regname.focus();
register_result.html('<span class="errorss"> * Full name can not be blank</span>');
} else if ($.trim(regemail.val()).length == 0) {
regemail.focus();
register_result.html('<span class="errorss">* Email address can not be blank</span>');
} else if (regpass.val() == '') {
regpass.focus();
register_result.html('<span class="errorss">* Password can not be blank</span>');
} else {
emailCheck().done(function (r) {
if (r) {
$('#regemail').focus();
$('#register_result').html('<span class="errorss"> This email address is already existed. Please choose another one </span>');
} else {
$('#signupForm')[0].submit();
}
});
}
});
});
function emailCheck() {
var regemail = $('#regemail');
var emailcheck = $('#emailcheck');
emailcheck.html('');
var UrlToPass = {
regemail: regemail.val()
};
var deferred = jQuery.Deferred();
$.ajax({
type: 'POST',
cache: false,
data: UrlToPass,
url: 'emailcheck.php',
success: function (responseText) {
if (responseText == 0) {
deferred.resolve(false);
} else {
emailcheck.html('<span class="errorss"> This email is existed.</span>');
deferred.resolve(true);
}
},
error: function () {
deferred.reject();
}
});
return deferred.promise();
}