用 JSON 处理缓存


用 JSON 处理缓存

文章插图

了解如何在客户端缓存验证元数据
每个应用程序的开发都是为了解决某个领域的问题 。而每个领域都有自己的一套约束数据的规则和规范 。应用程序将这些约束应用于数据时,约束也就成了验证 。所有应用程序都需要验证用户输入的数据 。
目前,应用程序一般都使用 if-else 语句组合来验证数据 。这些语句包含了开发人员硬编码或通过服务器端代码置入的验证数据 。通常,开发人员会使用服务器端代码来避免可能导致 JAVAServer Page(JSP)的细微数据更改 。
您可以使用 JavaScript Object Notation(JSON)来分组和缓存元数据,并使用 JavaScript 函数来访问元数据以验证用户输入 。
JavaScript 中有分散的元数据时,您无法控制服务器将评估多少数据以及有多少数据传递到客户机 。所有服务器端代码片段都将被评估并发送到服务器上 。但是,使用 JSON 缓存数据时,您可以完全控制向客户机发送的元数据量,因为服务器端代码将生成 JSON 形式的元数据 。这有助于仅将元数据发送至与看到或输入数据的用户相对应的客户机上 。
您还可以使用 JSON 来缓存用户输入的数据 。程序缓存数据后,将擦除数据字段而不是刷新屏幕,这与 Ajax 类似 。通过这种方法,用户可以为同一属性输入另一组数据 。
让我们一起来探究一下如何使用 JSON 来缓存元数据 。
JSON 概览
使用 JSON(即 JavaScript Object Notation),将以一种特定的字符串形式来表示 JavaScript 对象 。如果将具有这样一种形式的字符串赋给任意一个 JavaScript 变量,该变量随后将引用一个通过指定给该变量的字符串构建的对象 。
例如,假定有一个 policy 对象,它拥有以下属性:
  • 计划名称
  • 描述
  • 持续时间
您可以使用以下这种 JSON 形式的字符串来表示该 policy 对象:
{"Plane":{"Full Life Cover"}, "Description":{"The best life insurance plan"}, "Term":{"20 years"}}
如果将此字符串赋给任意一个 JavaScript 变量,则该变量将接受以这种对象为单位的数据 。要访问数据,请提供需要访问的属性所在的路径 。对于本例,将以上字符串赋给一个名为 policy 的变量:
var policy = {"Plane":{"Full Life Cover"}, "Description":{"The best life insurance plan"}, "Term":{"20 years"}}
将此字符串粘贴到 html 页面的标题部分中,然后编写以下警报:
alert(policy.Plan)
如果在任何支持 JavaScript 的浏览器中查看此页面,您都会看到显示策略计划的警报 。
示例
为了演示 JSON 的性能,我们来看一个有 vehicle 对象列表的 person 对象和一个可以拥有一台或多台车辆的 person 对象 。每台车辆都有以下属性:
  • 品牌
  • 注册码
  • CC
浏览器 UI 应当允许用户添加多台具有优秀应用性能的车辆(通常为固有要求) 。每个属性都有一些与之关联的限制或验证规则 。您需要指定以下规则:
  • 品牌名称
  • 品牌名称决不能包含数字 。
  • 品牌名称最多可包含两个单词,中间可加一个空格 。
  • 注册码
  • 注册码必须全都是数字 。
  • CC
  • CC 必须全都是数字 。
  • CC 的最小值为 50,最大值为 5000 。
将有三个与车辆属性相对应的输入字段,用户可在其中输入信息 。接下来,您将看到如何将验证消息分组到 JSON 组中以及如何访问这些验证消息 。
传统方法
现在,当用户输入的车辆数据为 40CC 时,程序必须显示一条消息,说明输入的数据不在有效的 CC 范围内 。您可以用 清单 1 中的代码简单地显示这条消息:
清单 1. 传统代码
if(cc < <%= minCC %> || cc > <%= maxCC %>) { alert(<%= ResourceList.vehicleCCRangeMsg >);}ResourceList 是一个服务器端类,该类中含有关于车辆的国际化消息(如 vehicleCCRangeMsg) 。这种方法解决问题时略显混乱:
  1. 在这种方法中,您将把服务器端代码添加到所有客户端验证函数中,以检查条件并显示消息 。
  2. 如果更改了元数据和消息(例如服务器端类或变量)的组织方法,您将会为更改使用这些元数据和消息的客户机脚本验证函数感到十分头痛 。
JSON 能帮助您做什么?
如果只需在条件语句和警报中引用一个 JavaScript 变量而不是服务器端代码,您感觉怎么样?不需要把服务器端代码包含在 JavaScript 中,而保存的服务器端元数据和消息中的更改也不会影响客户端脚本 。这种方法太棒了,是不是?好的,那就是使用基于 JSON 缓存元数据时要做的 。


推荐阅读