【问题标题】:Checking if user exists jquery validator,ajax and codeigneter检查用户是否存在 jquery 验证、ajax 和 codeigniter
【发布时间】:2013-04-21 11:32:57
【问题描述】:

我正在尝试检查用户名是否存在,但即使用户名不存在,它也会一直说“用户名已经存在”这是我的 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");
            }  
}

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

【问题讨论】:

  • 在 JavaScript 的最后,你有一个额外的});。复制和粘贴错字?

标签: php javascript codeigniter jquery-validate


【解决方案1】:

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

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

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

【讨论】:

  • 试过还是一样的问题
  • @Trustos,我用我的 CodeIgniter 和ajax 做几乎完全相同的事情,它对我来说工作得很好。唯一的区别是我使用的是type = "post"。在您的ajax 中进行控制台登录以查看响应的样子。添加console.log(result); 作为success 回调函数中的第一行。然后查看您的 JavaScript 控制台以查看返回的确切值。
  • 它返回存在并注意它应该存在的值。它就像错误消息用户名已经存在只是在它不应该弹出时不断弹出
【解决方案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 添加到您的请求中(请参阅:How do I make jQuery wait for an Ajax call to finish before it returns?

$.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."
);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多