[英]Can not return ajax responseText from a function in jquery
我有一個表格供用戶注冊新帳戶。 我使用jquery + ajax來檢查電子郵件地址是否模糊。 在Jquery代碼中,我使用了e.preventDefault();。 防止在出現任何錯誤時提交表單。 我嘗試了電子郵件輸入中的現有電子郵件地址,然后單擊提交表單。 它允許表單提交。 它不應該這樣做,因為ajax reponseText返回false。 請任何人告訴我該如何修改此代碼才能正常工作? 我也閱讀了類似的文章 ,我嘗試過但仍然無法正常工作。 請幫助我指出我需要修復當前代碼嗎?
這是我的表格:
<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();
$('#regemail').blur(emailCheck);
$('#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 (emailCheck()==false) {
regemail.focus();
register_result.html('<span class="errorss"> This email address is already existed. Please choose another one </span>');
e.preventDefault();
}
else if(regpass.val() == ''){
regpass.focus();
register_result.html('<span class="errorss">* Password can not be blank</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 true;
}
else{
emailcheck.html('<span class="errorss"> This email is existed.</span>');
return false;
}
}
});
}
因此,問題是:您正在嘗試從異步函數返回。 當您嘗試在success
回調函數中返回“ true”或“ false”時,您的函數emailCheck
已經結束,沒有返回任何內容。
因此,當您聲明一個函數submit
,您應該意識到,只有在返回ajax調用之后,您才能進一步進行提交。 我建議您始終從submit
返回false,然后,僅在回調內部決定是否提交代碼。 所以在這里,您可能會這樣:
$('#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>');
return false;
} else if ($.trim(regemail.val()).length == 0) {
regemail.focus();
register_result.html('<span class="errorss">* Email address can not be blank</span>');
return false;
} else if(regpass.val() == ''){
regpass.focus();
register_result.html('<span class="errorss">* Password can not be blank</span>');
return false;
}
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>');
//Reseting to submit bind to not call function again
$('#signupForm').submit(function(){});
$('#signupForm').submit();
}
}).fail(function(r){
// Do something if fail.
});
return false
});
這只是解決您的問題的方法 。 對於更優雅的解決方案,您應該再次檢查您提到的鏈接: 如何從異步調用返回響應? 。 特別是在答案中,“ 改善錯誤代碼 ”部分
您應該進行的另一項修復,您應該在回調函數中使用相同的選擇器再次選擇“ span”。 因此,請執行以下操作:
$('#emailcheck').html('<span class="errorss"> This email is existed.</span>');
代替這個:
emailcheck.html('<span class="errorss"> This email is existed.</span>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.