0

在这里,我试图检查用户名输入是否可供用户使用。我在codeigniter中这样做。这是我的查看页面:

<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!"));

            }
        }
    }
}
?>

但是我的代码不起作用,我错了,请帮帮我..只显示它可用于每个用户名

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

4

2 回答 2

1

使用 div 的 id 时你没有使用#,所以使用:

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

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

于 2012-07-05T09:44:26.720 回答
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');
    }
}

您将启用/禁用提交按钮。这将确保普通用户在输入被占用的用户名时将无法提交表单。

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

希望这可以帮助!

于 2012-07-05T09:46:18.487 回答