0

我正在尝试检查用户名是否存在,但即使用户名不存在,它也会一直说“用户名已经存在”这是我的 javascript 代码:

$.validator.addMethod("checkUsername", 
    function(value, element) {
        var test = "";
        $.ajax({
            type:"GET",
            url: site_url + "/ajax/checkusername/" + value,
            success: function(result){
               if(result=="exists")
                   return false;
               else
                   return true;
            }
        });
    }, 
    "Username Already Exists."
);



    $("#myform").validate({
        rules: {
            username2: {
                required: true,
                minlength: 6,
                checkUsername:true
            },
            password2: {
                required: true,
                minlength: 6
            },
            email: {
                required: true,
                email: true
            }
        }
    });
});

这是我的控制器代码:

public function checkusername($username)
{
            $this->load->model('user_model');
            $user = $this->user_model->getUser($username);
            if($user == null)
            {
                echo json_encode("notexists");
            }
            else
            {
                echo json_encode("exists");
            }  
}

关于如何解决这个问题的任何想法?提前致谢。

4

2 回答 2

4

当您不使用 JSON 解析 JSON 时,为什么要将响应编码为 JSON ajax

当你这样做时会发生什么?:

public function checkusername($username)
{
        $this->load->model('user_model');
        $user = $this->user_model->getUser($username);
        if($user == null)
        {
            echo "notexists";
        }
        else
        {
            echo "exists";
        }  
}

编辑

$.validator.addMethod("checkUsername", 
    function(value, element) {
        var result = false;
        $.ajax({
            type:"GET",
            async: false,
            url: site_url + "/ajax/checkusername/" + value,
            success: function(msg) {
                result = (msg == "exists") ? false : true;
            }
        });
        return result;
    }, 
    "Username Already Exists."
);
于 2013-04-27T14:56:15.980 回答
2

$.ajax读取一个字符串。因为你做echo json_encode这个字符串是json。

您可以使用$.getJSON代替$.ajax

$.getJSON( site_url + "/ajax/checkusername/" + value, function( json ) {
  if(json=="notexists"){alert('Not exists')}
 });

或添加$.parseJSON到您的原始代码:

  if($.parseJSON(result)=="exists")

更新:我不得不改变我的答案你的函数不返回你的结果$.ajax$.ajax必须设置您的返回值。由于在您的 ajax 完成之前无法返回,您还必须添加async: false到您的请求中(请参阅:如何让 jQuery 在返回之前等待 Ajax 调用完成?

$.validator.addMethod("checkUsername", 
    function(value, element) {
        var test = false;
        $.ajax({
        type:"GET",
        async: false,
        url: site_url + "/ajax/checkusername/" + value,
        success: function(result){
           if(result=="notexists") {test = true; }       
           }
    });
    return test;
    }, 
    "Username Already Exists."
);
于 2013-04-27T12:53:43.107 回答