【问题标题】:Using the same rules for jQuery validation and server-side validation对 jQuery 验证和服务器端验证使用相同的规则
【发布时间】:2012-04-17 02:38:56
【问题描述】:

由于用户看到的规则应该与服务器使用的规则相同,因此我想将验证规则存储在 JSON 文件中并为这两种情况加载它们。

但是,jQuery 验证插件似乎使用了无效 JSON 的设置,例如

$('form').validate( {
    rules : {
        userid : {
            required : true,
            maxlength : 20
        }
    }
});

注意没有一个键或字符串值是双引号的。这让我的服务器端 JSON 解析器很难过。我该怎么做才能只维护一套规则?

我的想法是,当请求实际发送到服务器时,我的服务器(在我的情况下为 Java servlet)将打开具有 rules 变量的 json 文件并解析它,以便它知道应用什么逻辑到发布的参数,以及是否接受或拒绝它们。

但是,JSON 规范不允许像 javascript 数组那样使用不带引号的键和值,因此我无法存储规则,因为它们通常只供 jQuery 使用。

【问题讨论】:

  • 如果将格式正确的文件存储在服务器上,然后使用 jQuery.getJSON() 获取它会发生什么?你能把结果变量传递给 validate() 函数并让它工作吗?

标签: jquery json validation


【解决方案1】:

虽然 JavaScript 文字并不总是有效的 JSON,但 JSON 始终是有效的 JavaScript 表达式。你可以使用它:

$('form').validate( {"rules":{"userid":{"required":true,"maxlength":20}}} );

【讨论】:

    【解决方案2】:

    有效的 json 是 Javascript 对象文字语法的子集。基本上,

    {
        key1: 2,
        key2: true
    }
    

    等同于:

    {
        "key1": 2,
        "key2": true
    }
    

    文字数字、布尔值和 null 是 JSON 中的特定值,因此如果您的解析器阻塞它们,那么您的解析器不正确。

    您可以在 Javascript 中使用“JSON”。

    JSON 实际上是 JavaScript 对象表示法,它被明确设计为有效的 Javascript,其想法是最坏的情况是您可以使用 eval 来解析它。 JQuery 不使用特定语法,它只需要一个特定的 结构化 对象,它不是映射,javascript 对象中没有字符串键的概念,只是有效标识符的成员,并且不是的成员。

    如果您有一个名为 people-seen 的字段,那么您可以像这样将该规则输入到验证器中:

    { "people-seen": {
       required: true
    }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 2012-09-06
      • 2010-09-11
      • 2011-11-11
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多