亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jquery的ajax請求尚未完成,就會接著執行后面的代碼嗎?

jquery的ajax請求尚未完成,就會接著執行后面的代碼嗎?

守候你守候我 2019-04-19 16:11:55
當一個注冊表單的提交按鈕點擊后,通過綁定的時間來確定用戶名、郵箱等是否有效,最后來確定是否提交表單。先設置一個變量status值為true,然后通過ajax來判斷用戶名、郵箱等是否已經注冊,如果已注冊就在回調函數中設置status的值為false,最后再判斷status的值是true還是false來決定是否提交。判斷status的代碼寫在ajax的后面,但是還是先執行了判斷status的代碼,再執行了ajax回調函數中設置status的代碼,不知道該怎么做?window.cb={};cb.register={};$('#register-submit').click(function(){var$self=$(this);var$form=$(this).closest('#register-form');var$username=$form.find('#register-username');varusername=$username.val();cb.register.status=true;if(!username.match(/^[0-9a-z_\u4e00-\u9af5]{2,14}$/i)){$username.next('span').remove();$username.after('無效的用戶名');cb.register.status=false;}else{$username.next('span').remove();$.post('/auth/ajax',{username:username},function(data){if(data.status==false){$username.after('用戶名已注冊');cb.register.status=false;}},'json');}var$email=$form.find('#register-email');varemail=$email.val();if(!email.match(/^[0-9a-z_\-]+@[0-9a-z_\-]+\.[a-z]{2,4}$/i)){$email.next('span').remove();$email.after('無效的郵箱');cb.register.status=false;}else{$email.next('span').remove();$.post('/auth/ajax',{email:email},function(data){if(data.status==false){$email.after('郵箱已注冊');cb.register.status=false;console.log(cb.register.status);}},'json');}var$pwd=$form.find('#register-password');varpwd=$pwd.val();if(!pwd.match(/^[0-9a-z_\-#@$*%&]{6,16}$/i)){$pwd.next('span').remove();$pwd.after('無效的密碼');cb.register.status=false;}console.log('hello');console.log(cb.register.status);returnfalse;if(cb.register.status==false){returnfalse;}$.post('/auth/register',{email:email,name:username,password:pwd},function(data){if(data.status==true){$self.css('display','none');var$message=$('#message');vars1='注冊成功';vars2='一封郵件已發送到郵箱,請在1小時內驗證(過期后需重新發送驗證郵件)';$message.find('.message-body').append(s1+s1);}else{var$token=$form.find('#token');$token.attr('name',data.token.name);$token.attr('value',data.token.value);$form.find('.submit-tips').remove();$form.prepend('注冊失敗,請重新提交');}},'json');returnfalse;});
查看完整描述

2 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

1)ajax請求時異步的,也就是請求后,你必須在回調函數中得到請求的結果,執行后續的判斷,
當然你可以設置成同步的:)
2)你的處理邏輯可以稍微修改下,把用戶的輸入信息驗證一次性處理,而不是分段處理
3)最后的后臺驗證合并成一個請求,在這個請求中統一處理用戶名/郵箱的問題
分段處理用戶體驗會更好
但是一定還是要記住ajax請求是異步的
                            
查看完整回答
反對 回復 2019-04-19
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

因為ajax是異步的,所以你后面的判斷應該放在回調函數中(就是你判斷返回值的地方),而不是放在外面!
還有建議你不要這么去做,單純的ui字段驗證(輸入是否合法),先做,之后再去后端查是否被注冊過。
查詢是否被注冊過最好能用1個請求來,你這樣分成2個,嵌套起來太麻煩了。
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 343 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號