2012-04-17 86 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 
}}