使用Codeigniter问题进行jQuery验证

时间:2010-11-08 22:29:58

标签: php jquery validation codeigniter jquery-plugins


我有一个输入字段,我想在用户输入时动态验证...我正在使用Codeigniter,我相信我有一些URI问题...让我告诉你代码......

HTML / PHP:
<input type="text" id="username"> <span id="validateUsername"></span>

jQuery:

$(document).ready(function() {
    var validateUsername = $('#validateUsername');
        $('#username').keyup(function () {
        var t = this; 

        if (this.value != this.lastValue) {
            if (this.timer) clearTimeout(this.timer);
            validateUsername.removeClass('error').html('<img src="<?php echo site_url("public/images"); ?>/ajax-loader.gif" height="16" width="16" /> checking availability...');
            this.timer = setTimeout(function () {
                $.ajax({
                    url: '<?php echo base_url(); ?>register/check_user/' + t.value,
                    dataType: 'json',
                    type: 'POST',
                    success: function (j) {
                        validateUsername.html(j.msg);
                    }
                });
            }, 200);

            this.lastValue = this.value;
        }
    });
});

我的codeigniter控制器有一个非常简单的功能:

function check_user($username) {
    // var_dumping stuff goes here
}

在那里,我只是尝试var_dump不同的东西(比如$ _SERVER,$ _REQUEST,$ username),但我认为我的脚本甚至没有到达那个控制器......

我试图在我的jQuery脚本中更改url: '<?php echo base_url(); ?>register/check_user/' + t.value,行,但似乎没有组合可行。例如:
url: '<?php echo site_url('register/check_user/'); ?>' + t.value,
url: 'index.php/register/check_user/' + t.value,
url: 'register/check_user/' + t.value,

...无论我尝试我的validateUsername范围,只显示“检查可用性”消息。

我在Chrome,Safari和IE8中尝试使用我的脚本。 PHP版本是5.3.0,jQuery是1.4.2 ......

任何想法在这里可能出错?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

我发现您的代码可能存在多个问题:

是否正确设置了路线?

在CodeIgniter routes中,执行以下操作:

$route['register/check_user/(:any)'] =" register/check_user/$1";

在CodeIgniter控制器中,使用以下命令访问变量:

function check_user() {
    $username = $this->uri->segment(3);
    var_dump($username);
    // var_dumping stuff goes here
}

另外,我建议使用jQuery Text Change event,它对我有用,而不是使用setTimeouts和keyup。

示例:

$('#username').bind('textchange', function () {
   $.post('<?php echo base_url(); ?>register/check_user/' + this.value, function(data) {
      $('#validateUsername').html(data);
    });
});