2013-04-27 45 views
0

餘米試圖檢查,如果用戶名存在與否,但即使用戶名不存在,它口口聲聲說「用戶名已存在」這是我的javascript代碼:檢查是否存在用戶jQuery的驗證,Ajax和codeigneter

$.validator.addMethod("checkUsername", 
    function(value, element) { 
     var test = ""; 
     $.ajax({ 
      type:"GET", 
      url: site_url + "/ajax/checkusername/" + value, 
      success: function(result){ 
       if(result=="exists") 
        return false; 
       else 
        return true; 
      } 
     }); 
    }, 
    "Username Already Exists." 
); 



    $("#myform").validate({ 
     rules: { 
      username2: { 
       required: true, 
       minlength: 6, 
       checkUsername:true 
      }, 
      password2: { 
       required: true, 
       minlength: 6 
      }, 
      email: { 
       required: true, 
       email: true 
      } 
     } 
    }); 
}); 

這是我的控制器代碼:

public function checkusername($username) 
{ 
      $this->load->model('user_model'); 
      $user = $this->user_model->getUser($username); 
      if($user == null) 
      { 
       echo json_encode("notexists"); 
      } 
      else 
      { 
       echo json_encode("exists"); 
      } 
} 

有關任何想法這可怎麼解決呢? 在此先感謝。

+0

在你的JavaScript的盡頭,你有一個額外的'});' 。複製並粘貼錯字? – Sparky 2013-04-27 14:52:05

回答

4

你爲什麼編碼響應,JSON,當你不使用JSON解析您的ajax

時,你只需做到這一點?:

public function checkusername($username) 
{ 
     $this->load->model('user_model'); 
     $user = $this->user_model->getUser($username); 
     if($user == null) 
     { 
      echo "notexists"; 
     } 
     else 
     { 
      echo "exists"; 
     } 
} 

編輯會發生什麼:

$.validator.addMethod("checkUsername", 
    function(value, element) { 
     var result = false; 
     $.ajax({ 
      type:"GET", 
      async: false, 
      url: site_url + "/ajax/checkusername/" + value, 
      success: function(msg) { 
       result = (msg == "exists") ? false : true; 
      } 
     }); 
     return result; 
    }, 
    "Username Already Exists." 
); 
+0

試過它仍然是同樣的問題 – Trustos 2013-04-27 15:31:35

+0

@Trustos,我做的差不多與我的CodeIgniter&'ajax'完全相同,它對我來說工作得很好。唯一的區別是我的使用'type =「post」'。做一個控制檯登錄你的'ajax'來看看響應的樣子。添加'console.log(result);'作爲你的'success'回調函數中的第一行。然後查看您的JavaScript控制檯以查看返回的確切值。 – Sparky 2013-04-27 15:50:22

+0

它返回存在並notexist它應該的值。它就像錯誤消息用戶名已存在只是不斷彈出時,它不應該 – Trustos 2013-04-27 16:27:40

2

$.ajax讀取一個字符串。因爲你做echo json_encode這個字符串是json。

您可以代替使用$.getJSON$.ajax

$.getJSON(site_url + "/ajax/checkusername/" + value, function(json) { 
    if(json=="notexists"){alert('Not exists')} 
}); 

或添加$.parseJSON你原來的代碼:

if($.parseJSON(result)=="exists") 

更新:我不得不改變我的回答你的 功能不返回$.ajax的結果。 $.ajax必須設置您的返回值。原因不能返回你的Ajax已經完成之前,你還必須添加async: false您的要求(見:How do I make jQuery wait for an Ajax call to finish before it returns?

$.validator.addMethod("checkUsername", 
    function(value, element) { 
     var test = false; 
     $.ajax({ 
     type:"GET", 
     async: false, 
     url: site_url + "/ajax/checkusername/" + value, 
     success: function(result){ 
      if(result=="notexists") {test = true; }  
      } 
    }); 
    return test; 
    }, 
    "Username Already Exists." 
); 
+0

嘗試過但不起作用。 – Trustos 2013-04-27 14:01:40

+0

當您在瀏覽器中加載site_url +「/ ajax/checkusername /」+值時,結果如何? – 2013-04-27 14:07:10

+0

如果我這樣做一個 HTTP://localhost/virtualclubmanager/index.php/ajax/checkusername/aaaaaaa 返回「nonexists」,因爲它不是在數據庫 如果我這樣做一個 的http://本地主機/ virtualclubmanager/index.php/ajax/checkusername/testing 它返回「存在」,因爲它在數據庫中 – Trustos 2013-04-27 14:21:26