0

我遵循了有关 ajax 查找的教程,该教程会通知用户用户名是否已被使用。

所以控制器语法是:

<?php
    class Login extends CI_Controller
    {
        function index()
        {
            $this->load->view('loginView');
        }
        function getResultfromdb($username){

            $this->db->where('username',$username);
            $query = $this->db->get('users')->num_rows();
            if($query == 0 ) echo 'userOk';
            else echo 'userNo';
        }
    }

观点是:

<html>
    <head>
        <title>Check User Name</title>
        <link type="text/css" rel="stylesheet" href="<?=base_url()?>css/style.css"/>
    </head>

    <body>
        <form method="post" action="">

            <label for="username">Enter Your Name</label>
            <input type="text" id="username"/>
            <span class="checkUser" ></span>
            <input type="hidden" class="hiddenUrl"/>
        </form>

        <script type="text/javascript" src="<?=base_url()?>js/jquery-1.6.2.min.js"></script>
        <script type="text/javascript" src="<?=base_url()?>js/check.js"></script>

    </body>
</html>

check.js 是:

$(document).ready(function(){

    $('#username').blur(function(){

        if( $('#username').val().length >= 3 )
            {
              var username = $('#username').val();
              getResult(username); 
            }
        return false;
    })
    function getResult(name){
        var baseurl = $('.hiddenUrl').val();
        $('.checkUser').addClass('preloader');
        $.ajax({
            url : baseurl + 'index.php/login/getResultfromdb/' + name,
            cache : false,
            success : function(response){
                $('.checkUser').removeClass('preloader');
                if(response == 'userOk') $('.checkUser').removeClass('userNo').addClass('userOk');
                else $('.checkUser').removeClass('userOk').addClass('userNo');;
            }
        })
    }
})

如前所述,这很好用。所以它将验证bobandy完美。但是它在bob smithand上失败了andy jones。如何修改代码以验证带空格的字符串?

一如既往地感谢,

4

2 回答 2

1

它失败了,因为您试图在 URL 中传递用户名,浏览器在传递时可能会将空间编码为 %20。因此,您的 CI 功能正在寻找 bob%20smith 而不是 bob smith。

首先,我认为甚至允许用户名中的空格而是每个人自己的空格都不是很好的做法。您需要先解码 URL

 function getResultfromdb($username){

            $this->db->where('username',urldecode($username));
            $query = $this->db->get('users')->num_rows();
            if($query == 0 ) echo 'userOk';
            else echo 'userNo';
        }
于 2013-03-02T12:23:24.830 回答
0

使用encodeURIComponent(string),例如:

var name = encodeURIComponent(name);

你的js看起来像这样

$(document).ready(function(){

$('#username').blur(function(){

    if( $('#username').val().length >= 3 )
        {
          var username = $('#username').val();
          getResult(username); 
        }
    return false;
})
function getResult(name){
    var name = encodeURIComponent(name); // Replace name before send it
    var baseurl = $('.hiddenUrl').val();
    $('.checkUser').addClass('preloader');
    $.ajax({
        url : baseurl + 'index.php/login/getResultfromdb/' + name,
        cache : false,
        success : function(response){
            $('.checkUser').removeClass('preloader');
            if(response == 'userOk') $('.checkUser').removeClass('userNo').addClass('userOk');
            else $('.checkUser').removeClass('userOk').addClass('userNo');;
        }
    })
}
})

和 php :

<?php
$url = urldecode($_GET['name']); // Replace with your parameter 
?>

好的 祝你好运

于 2013-03-02T12:20:26.920 回答