2012-04-17 59 views
1

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

然而,jQuery验证插件似乎使用的设置是不是有效的JSON,如

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

注意如何没有按键或字符串值被双引号。这使我的服务器端JSON解析器很难过。我该怎么做才能保持一套规则?

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

但是,JSON规范不允许未加引号的键和像javascript数组这样的值,所以我不能像jQuery使用那样存储规则。

+0

如果你存储在服务器上的正确格式的文件,会发生什么,然后使用jQuery .getJSON()获取它?你可以将结果变量传递给validate()函数并使其有效吗? – ccleve 2012-04-17 02:44:28

回答

1

尽管JavaScript文字不总是有效的JSON,但JSON始终是有效的JavaScript表达式。您可以使用它:

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

呵呵。我认为验证插件会定义一个名为“required”的var,并赋予它一些值......这不是字符串“required”。 – bdares 2012-04-17 03:01:51

0

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

{ 
    key1: 2, 
    key2: true 
} 

是相同的:

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

面值数字,布尔值和空是JSON特定的值,因此,如果您的解析器扼流圈他们,那么你的解析器不正确。

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

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

如果你是这么叫的人,看到一个字段,那么你会进入该规则为验证这样的:

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