本文給大家講述的是個人再做用戶注冊的時候遇到的ajax執(zhí)行優(yōu)先級的問題,以及在網(wǎng)友們的幫助下,解決此問題的全過程,這里記錄下來,分享給大家。
今天在做用戶注冊時:發(fā)現(xiàn)了一個奇怪的問題,請看代碼:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $('input[name="username"]').blur(function(){ //驗證格式 var pattern = /^[a-z][w]{4,11}$/i; if(!pattern.test($(this).val())) { $(this).siblings('.desc').html('<font style="color:red;">5-12個字符,必須以字母開頭,只能輸入數(shù)字,字母和下劃線</font>'); return false; } //驗證用戶名是否被注冊 $.post('register.php?act=checkUser',{username:$(this).val()},function(data){ if(data.status == 'error') { $('input[name="username"]').siblings('.desc').html('<font style="color:red;">'+data.info+'</font>'); return false; } },'json'); //成功 alert('成功'); //$(this).siblings('.desc').html('<img src="./public/images/ok.gif" />'); });按道理說,上面的格式是
1、驗證用戶名是否符合格式
2、格式正確再AJAX判斷用戶名是否被占用,
3、都成功則顯示正確的圖標,
但是問題是當我驗證用戶格式成功了之后,它就直接執(zhí)行了,alert('成功'),然后再執(zhí)行ajax,這是為什么呢?是ajax執(zhí)行的時間問題嗎?還是別的???
這是PHP代碼:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 if($_GET['act'] == 'checkUser') { if($_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') exit('非法操作!!!'); $sql = "SELECT id FROM {$sys_vars['db_pre']}user WHERE username='{$_POST['username']}'"; $result = mysql_query($sql); $data = mysql_fetch_assoc($result); if ($data) { exit(json_encode(array('status'=>'error','info'=>'該用戶名已被注冊!!!'))); }else{ exit(json_encode(array('status'=>'success'))); } }分析如下
ajax是異步操作,當執(zhí)行ajax相關功能函數(shù)時,系統(tǒng)先返回函數(shù),再進行請求,當收到請求結(jié)果,會通過調(diào)用回調(diào)函數(shù)的方式返回給用戶。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $('input[name="username"]').blur(function(){ //驗證格式 var pattern = /^[a-z][w]{4,11}$/i; if(!pattern.test($(this).val())) { $(this).siblings('.desc').html('<font style="color:red;">5-12個字符,必須以字母開頭,只能輸入數(shù)字,字母和下劃線</font>'); return false; } //驗證用戶名是否被注冊 $.post('register.php?act=checkUser',{username:$(this).val()},function(data){ if(data.status == 'error') { $('input[name="username"]').siblings('.desc').html('<font style="color:red;">'+data.info+'</font>'); return false; } }, function(data){ //對于post函數(shù),第三個參數(shù)為回調(diào)函數(shù) alert('成功'); } ,'json'); //成功 //alert('成功'); //$(this).siblings('.desc').html('<img src="./public/images/ok.gif" />'); });新聞熱點
疑難解答