2012-07-05 123 views
0

在这里,我试图检查用户名输入是否可用于用户。我正在做codeigniter。 这是我的看法页:检查在codeigniter中使用ajax和jquery的用户名的可用性

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script> 
    <style type="text/css"> 
     .no{color:red;} 
     .yes{color:green;} 
    </style> 
    <script> 
     $(document).ready(function(){ 
       // unique user name checking ------------- starts here---------------- 
       $("#username").blur(function(){ 
         var form_data= { 
          action : 'check_username', 
          username : $(this).val 
         }; 

         $.ajax({ 
           type: "POST", 
           url : "check_unique_username", 
           data : form_data, 
           success : function(result) { 
            $("#message").html(result.message); 
            alert(result); 
           } 
         }); 
       }); 
       // unique username checking -------------- ends here----------------- 
     }); 

    </script> 
</head> 
<body> 
    <form class="RegistrationForm" id="RegistrationForm" method="POST" action=""> 
     <label for="username">User Name</label> 
     <div> 
      <input id="username" name="username" size="25" class="required" /> 
     </div> 
     <input type="button" id="button1" name="button1" value="check availability" /> 
     <div id="message"></div> 
    </form> 
</body> 

这里是我的控制器代码:

<?php 
class Registration extends MX_controller { 
    function index(){ 
     $this->load->view('registrationPage'); // this will load the registration page. 
    } 
    function unique_username() { 
     $action = $_POST['action']; 
     if($action=='check_username'){ 
      $u = $this->input->post('username'); 
      $users=array("jhon","neo","margo","hacker","user123"); 
      if(in_array($u,$user)) { 
       echo json_encode(array('message' => "It is not available!")); 

      } 
      else { 
       echo json_encode(array('message' => "It is available!")); 

      } 
     } 
    } 
} 
?> 

但我的代码不能正常工作,在那里我得到错误,请帮我..只显示它可用于每个用户名

编辑:我改变了我的控制器代码...

+1

'我的代码不工作' - 怎么样?它做错了什么? – forsvarir 2012-07-05 09:36:04

+0

@forsvarir'code not working'意思是它没有显示用户名是否可用。 – avinashse 2012-07-05 09:54:24

+0

你的代码不工作:)你的代码哪部分不工作?什么服务器返回?你的萤火虫在哪里? – Red 2012-07-05 18:11:18

回答

1

同时使用div的ID,您没有使用#,所以使用:的

$("#message").html(result); 

代替$("message").html(result);

+0

欢迎来到堆栈溢出!今后,请花更多时间来撰写或格式化您的帖子。可以找到格式帮助[here](http://stackoverflow.com/editing-help) – Matt 2012-07-05 09:47:44

+0

@hemant: - 好眼睛,我指出了,但那不是解决我的问题.. – avinashse 2012-07-05 09:53:21

+1

@Matt:感谢您的帮助我在格式化。我会花更多时间来格式化答案。 – 2012-07-05 10:00:16

0

编辑:更新的答案更新的问题。

它其实很愚蠢我们都看不到它,但问题是这个字符串:username : $(this).val。原因是.val不是jQuery的方法,它是文本字段的值,它应该是username : $(this).val()(带括号)。

这包括第一部分JS,接下来的问题是一个错字,你有url : "check_unique_username",,但它应该是url : "registration/unique_username",(没有控制器的名称,并有不必要的check_前缀,而在控制器的方法是没有的话)。

下一个错字是在PHP - if(in_array($u,$user)) {,但我们有一个数组$users,所以将其更改为if(in_array($u,$users)) {,使PHP不会抛出一个通知。

下一个问题是AJAX请求中缺失的行dataType: 'json',。我们必须这样做,以便JS能够知道我们正在接收的数据类型并以正确的方式解析它。

之后,它应该工作。但我有一些建议给你。更改PHP,以便它不会返回字符串,而是一个布尔值。例如 - 如果可用,则为true,否则为false。

if(in_array($u,$users)) { 
    echo json_encode(array('message' => false)); 
} else { 
    echo json_encode(array('message' => true)); 
} 

这样,在你的JS代码中处理这些数据会更容易。例如,您可以将此代码添加到AJAX请求的成功部分:

success : function(result) { 
    if(result.message) { 
     $("#message").html("It's available!"); 
     $("#button1").removeAttr('disabled'); 
    } else { 
     $("#message").html("It's not available!"); 
     $("#button1").attr('disabled','disabled'); 
    } 
} 

而且您将启用/禁用您的提交按钮。这将确保普通用户在输入用户名时不能提交表单。

此外,我会将事件blur更改为keyup,这样您将有更快的更新,但它在服务器上更加沉重。 blur事件的问题在于您的用户可以填写用户名,然后单击按钮,因为只有在用户离开元素后才会触发模糊事件。

希望这会有所帮助!

+0

感谢回复@Vlakarados,但为什么我的代码不工作 – avinashse 2012-07-05 09:57:15

+0

我做到了,但这种方式也没有工作,没有检查用户可用性:( – avinashse 2012-07-05 10:12:46

+0

使用chrome或者用firebug查看AJAX响应是什么 - 在chrome precc Ctrl + Shift + C中,打开网络,让你的页面执行AJAX请求,你会看到它显示在列表中,打开它并查看预览标签。您收到了哪些数据? – 2012-07-05 10:21:06

相关问题