2014-05-07 91 views
0

我有一個代碼,用於檢查用戶名是否可用,如果您想更改。但是現在我看到,如果你更新了別的東西,比如你的密碼,你可以假設用戶名已經存在。 下面列出的是我使用的代碼,正如你所看到的,我試圖想到一些東西,但一點都不好。檢查用戶名是否存在,然後我想更新

PHP

$sql = "Select * FROM table WHERE Slug = '$slug' AND ID ='$id' LIMIT 1"; 
$query = mysql_query($sql); 

if(mysql_num_rows($query)>0){  
    echo 'true'; 
}else{ 
    $e_sql = "Select * FROM table WHERE Slug = '$slug'"; 
    $e_query = mysql_query($e_sql); 
    if(mysql_num_rows($e_query)>0){  
     echo 'false'; 
    }else{ 
     echo 'false'; 
    } 
} 

jQuery的/ JavaScript的

var response; 
    $.validator.addMethod(
     "uniqueUserName", 
     function(value, element) { 
      $.ajax({ 
       type: "POST", 
       url: "User.php", 
       data: { 
       'slug': value, 
       'id': <?php echo $id; ?> 
       }, 
       dataType:"html", 
       success: function(msg) 
       { console.log(msg); 
        response = (msg == 'true') ? true : false; 

       } 
      }); 
      return response; 
     }, 

     "This Name is already used!" 
    ); 

    $("#addSurvey").validate({ 
     rules: { 
      name: { 
       required: true, 
       uniqueUserName: true 
      }, 
     } 
    }); 
+0

尼斯^^「響應=(MSG ==' true')?true:false;「。只是「回覆=(msg =='true')」起作用 – OpenStark

回答

1

基本問題是在你的$.ajax請求。

如您所知$.ajax默認情況下執行異步HTTP(Ajax)請求。

最簡單的解決方案是讓請求同步。

要請求同步您應該設置選項async: false - 將線性執行在這種情況下的代碼,你會得到return response;只有當AJAX請求完成。

所以基本上改變AJAX調用的一部分,以:

$.ajax({ 
     type: "POST", 
     url: "User.php", 
     async: false, 
     data: { 
     'slug': value, 
     'id': <?php echo $id; ?> 
     }, 
     dataType:"html", 
     success: function(msg){ 
     response = msg === 'true'; 
     } 
    }); 

可能有用:

jQuery.ajax() Documentation

+0

這有點慢,但按我的意願工作!謝謝:D – Slaffe

+0

無論如何,你需要等待服務器的響應,不是嗎?:) –

+0

但實際上性能問題是在你的服務器端,而不是客戶端。 如果您使用SELECT EXISTS(SELECT 1 FROM table1 WHERE Slug ='$ slug'AND ID ='$ id')來檢查用戶是否存在,它會快得多。 –

0

設置

response = ((msg == 'true') ? true : false); 
相關問題