针对json/array的jQuery文本字段验证

针对json/array的jQuery文本字段验证,jquery,json,validation,Jquery,Json,Validation,我正在寻找一种解决方案,根据json文件提供的数组验证textfield的输入。 例如:在注册表中检查所需用户名是否已存在 有人能提供一个有用的例子、插件、脚本或教程吗 “usernames.json”看起来像这样 {"usernames":["carl","jack","jill"]} …并与…一起宣读 $.getJSON("usernames.json", function(names) { var invalidName = names; 我会继续 jQuery.validator.a

我正在寻找一种解决方案,根据json文件提供的数组验证textfield的输入。 例如:在注册表中检查所需用户名是否已存在

有人能提供一个有用的例子、插件、脚本或教程吗

“usernames.json”看起来像这样

{"usernames":["carl","jack","jill"]}
…并与…一起宣读

$.getJSON("usernames.json", function(names) {
var invalidName = names;
我会继续

jQuery.validator.addMethod
…但从现在起,我就被困住了

如果有人能提供一个有用的例子,我将非常高兴

////////////////////////////////////////////////////

编辑:多亏了Utkanos和Pavel Staseljun,我可以想出以下解决方案,这只是粗略测试! 请在下面找到Utkanos的例子,因为这个例子包括“keyup”处理而不是“submit”,并且不包括“required”检查。 “#errorresponse”是div,其中可能会显示错误消息

$.ajax({
  url: "http://yoururlto.json?callback=?",
  dataType:"jsonp",
  jsonpCallback: '?',
  async: false,
  success: function(json) {
        $('#user').keyup(function(evt) {
        var jsonarray = json.usernames;
        var userinput = $('#user').val().toLowerCase()
        var check = $.inArray(userinput, jsonarray);
        if (check !== -1) {
            $("#errorresponse").text('Thanks to Utkanos and Pavel Staseljun!');
            }
        })
      }
});
HTML


为什么要将所有用户名从服务器发送到客户端?这听起来是个很糟糕的主意。请执行类似于服务器端函数的操作,该函数检查发布的用户名,并返回true或false(有效或无效)?

您不能创建一个ajax脚本来检查用户名是否存在吗


imo更好,因为您可以使用远程选项直接将其与jquery验证器集成。

我认为
if($.inArray($('#username').val(),json.usernames))error='username ready take'
而不是
if(json.usernames.indexOf($('#username').val())!=-1)错误='用户名已被占用'更好..?嗯,是的,它更跨浏览器。我只是喜欢ECMA5:)非常感谢你们两位!这很有帮助!:-)因为我更喜欢某种“即时”验证,所以json更快。这应该也适用于移动设备;在这种情况下,服务器端功能(如php)是不可能的。通过使用ajax,您可以使用“动态”验证,尤其是在移动设备上,您将非常快地达到这样一个地步:保存10000个用户名的数组比简单的ajax请求慢得多。此外,如果每个客户端都能读取您的所有用户名,这似乎是一个安全问题。也许我们有误解?我确实使用ajax/js进行验证本身。:-)事实上,我选择了“用户名”场景作为示例,以使问题更加常见。有两个验证步骤:一个是在发送表单之前(客户端),另一个是在通过php处理提交时(服务器端)。所以,在本例中,它只是关于快速客户端解决方案。你是对的,这可能是一个解决方案,但在本例中,我正在寻找客户端“预验证”。
<form id='signup'>
    <label>Choose a username</label>
    <input type='text' id='user' />
    <input type='submit' value='submit' />
</form>
$.getJSON("usernames.json", function(json) {
    $('#signup').on('submit', function(evt) {
        var user = $('#user').val(), error;
        if (!user)
            error = 'no username entered';
        else if (json.usernames.indexOf(user) != -1)
            error = 'username already taken';
        if (error) { evt.preventDefault(); alert(error); }
    });
});