Jquery Validation用远程检查用户名

Posted

技术标签:

【中文标题】Jquery Validation用远程检查用户名【英文标题】:Jquery Validation check username with remote 【发布时间】:2014-07-29 02:48:57 【问题描述】:

我正在使用验证插件和 Laravel 4.2。 我尝试通过 ajax 检查用户名,但无法正常工作。 用户名总是可以使用的,不管是否存在。

我的第二个问题是,如果我使用远程验证规则,我无法提交表单。

有人知道我做错了什么吗?因为在 chrome 日志中一切正常,请求已发送,我可以看到调试消息。

php

<?php 
use App\Models\User;
class ValidationController extends BaseController 

public function getCheckUsername() 

    if(Request::ajax()) 
        $user = User::where('username', Input::get('username'))->get();
        if($user->count()) 
            return Response::json(array('msg' => 'true'));
        
        return Response::json(array('msg' => 'false'));

    





JS

$(document).ready(function()

$("form").validate(

rules: 
        username: 
                required: true,
                     rangelength:[3,255],
        remote: 
                url:"http://"+location.host+"/validation/checkusername",
                type: "get",
                success: function(msg)
                 if(msg.msg == 'true') 
                  console.log('exists');
                  return true;
                 
                 console.log('doesnt exists');
                  return false;
                

                ,


                ,
  messages: 
            username: 
                required: "Please Enter Username!",
                remote: "Username already in use!"
            
        
);
);

我也尝试通过 $.validator.addMethod() 创建自己的规则,但这也不起作用。

【问题讨论】:

这是一个跨域ajax请求吗? 不,不是。与您看到的域相同。 【参考方案1】:

看起来您不是在发送数据。尝试这个。请注意发布请求。另外我相信 dataFilter 方法应该返回'true'

更新我刚刚也意识到如果用户存在,您的 php 中的逻辑将返回 true,因此 javascript 中的逻辑应该是这样的:

remote: 
    url: "http://"+location.host+"/validation/checkusername",
    type: "post",
    data: 
        username: function () 
            return $("input[name='username']").val();
        
    ,
    dataFilter: function (data) 
        var json = JSON.parse(data);
        if (json.msg == "true") 
            return "\"" + "That username is taken" + "\"";
         else 
            return 'true';
        
    

【讨论】:

数据正在通过get发送。您解决了一个问题,现在我可以发送有效的表格。但是远程功能仍然不起作用。 在您的开发人员工具控制台网络选项卡中对 ajax 调用的响应说明了什么? 我刚刚更新了,我意识到由于你的 msg 也是 true,所以两者都可能返回 true。 200。所以没关系。我尝试了您更新的解决方案,但仍然是同样的问题。

以上是关于Jquery Validation用远程检查用户名的主要内容,如果未能解决你的问题,请参考以下文章

jQuery验证远程方法使用以检查用户名是不是已经存在

jquery中validation部分学习笔记

Jquery Validation,如果出现错误,我该如何运行自定义代码

Jquery Validation 一般错误?

JQuery Validation Plugin - 如果用户选择任一单选按钮,则验证字段。

jquery validation笔记