Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在codeigniter中使用ajax和jquery检查用户名的可用性_Php_Javascript_Jquery_Ajax_Codeigniter - Fatal编程技术网

Php 在codeigniter中使用ajax和jquery检查用户名的可用性

Php 在codeigniter中使用ajax和jquery检查用户名的可用性,php,javascript,jquery,ajax,codeigniter,Php,Javascript,Jquery,Ajax,Codeigniter,在这里,我试图检查用户名输入是否可供用户使用。我在codeigniter中做这件事。 这是我的查看页面: <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/j

在这里,我试图检查用户名输入是否可供用户使用。我在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>

.no{颜色:红色;}
.yes{颜色:绿色;}
$(文档).ready(函数(){
//唯一用户名检查-----------------从此处开始----------------
$(“#用户名”).blur(函数(){
变量形式_数据={
操作:“检查用户名”,
用户名:$(this).val
};
$.ajax({
类型:“POST”,
url:“检查唯一用户名”,
数据:表格数据,
成功:功能(结果){
$(“#message”).html(result.message);
警报(结果);
}
});
});
//唯一用户名检查-----------------到此结束-----------------
});  
用户名

这是我的控制器代码:

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

            }
        }
    }
}
?>

但是我的代码不起作用,哪里出了问题,请帮我解决。只显示它对每个用户名都可用

已编辑:我已更改控制器代码…

您在使用div的id时未使用
#
,因此请使用:

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

而不是
$(“message”).html(结果)

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

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

这涵盖了第一个JS部分,下一个问题是输入错误,您有
url:“检查\u唯一\u用户名”
,但它应该是
url:“注册/唯一\u用户名”
(没有控制器名称,并且在控制器中方法没有前缀时有不必要的
检查\u

下一个输入错误是在PHP中-
if(in_array($u,$user)){
,但我们有一个数组
$users
,所以将其更改为
if(in_array($u,$users)){
,这样PHP就不会抛出通知

下一个问题是AJAX请求中缺少的
数据类型:'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
事件的问题是,用户可以填充用户名并单击按钮,因为blur事件只有在用户离开元素后才会触发


希望这有帮助!

“我的代码不工作”-如何?它做错了什么?@forsvarir
代码不工作
意味着它没有显示用户名是否可用。你的代码不工作:)你的代码的哪一部分不工作?什么服务器返回?你的firebug在哪里?我可以看到你正在使用hmvc,发布你的文件夹结构真的会有帮助。我认为url:“check\u unique\u username”应该是一个php文件。您是否检查了url:“check\u unique\u username”是否真的给出了回复?如果您使用的是chrome,请按ctrl+shift+i,然后选择控制台并在此处评论您看到的内容欢迎使用Stack Overflow!将来,请花更多时间撰写或格式化您的文章。可以找到格式化帮助@Matt:谢谢您在格式化方面的帮助。我将花更多时间格式化答案。@Avinasse:-请在成功函数中添加警报(结果)并检查它返回的内容。感谢@Vlakarados的回复,但我的代码不起作用的原因。我这样做了,但这种方式也不起作用,没有检查用户可用性:(使用chrome或Firefox与firebug一起查看AJAX响应是什么-在chrome precc Ctrl+Shift+C中,打开网络,让您的页面执行AJAX请求,您将看到它显示在列表中,打开它并查看预览选项卡。您收到了什么数据?在firebug中显示:-在控制台中发布200 OK 44ms,操作我正在获取
获取此页面。{“message”:“它是可用的!”
成功
部分尝试:
警报(result.message)
。此外,我注意到我的答案中有一个拼写错误,应该是
$(“#message”).html(result.message);
,尝试这两个部分,看看是否出现了什么