技术开发 频道

精通 Grails: 用 JSON 和 Ajax 实现异步 Grails

  【IT168技术文档】本文讨论 Grails 对于其互补技术 JSON 和 Ajax 的支持。在前几期的 精通 Grails 系列文章中,JSON 和 Ajax 都扮演支援者的角色,而这一次,它们担任主角。您将使用内置的 Prototype 库和 Grails 标记发出一个 Ajax 请求。您还将看到一些关于提供本地 JSON 和通过 Web 动态获得 JSON 的例子。

  为了进行演示,您将组建一个旅行计划页面,在该页面中,用户可以输入出发地机场和目的地机场。当机场显示在一个 Google Map 上时,用户可通过一个链接搜索目的地机场附近的宾馆。图 1 显示了这个页面:

  图 1. 旅行计划页面  

  您可以在 1 个 GSP 文件和 3 个控制器中,用大约 150 行代码实现所有这些功能。

  Ajax 和 JSON 简史

  在 20 世纪 90 年代中期 Web 首次流行起来的时候,浏览器只允许粗粒度的 HTTP 请求。单击一个超级链接或一个表单提交按钮,就会导致整个页面被清除,并且被新的结果替代。这对于以页面为中心的导航来说本无大碍,但是页面上单个的组件却无法独立地更新。

  1999 年,Microsoft® 在 Internet Explorer 5.0 中引入了 XMLHTTP 对象。这个新对象使开发人员可以发出 “微” HTTP 请求,保持周围的 HTML 页面不受影响。虽然这个特性不是基于 World Wide Web Consortium(W3C)标准,但 Mozilla 小组已经意识到它的潜力,并在 2002 年的 Mozilla 1.0 发行版中增加了一个 XMLHttpRequest(XHR)对象。从那以后,它就成了一个事实上的标准,每个主流 Web 浏览器都提供这样的对象。

  2005 年,Google Maps 终于发布。对异步 HTTP 请求的广泛使用使得它与当时的其他 Web 映射站点形成鲜明的对比。在浏览 Google Map 时,不再是单击一下,然后等待整个页面重新装载,而是可以用鼠标顺畅地滚动地图。Jesse James Garrett 在一个 blog 帖子中使用简单易记的 Ajax 描述在 Google Maps 中使用的各种技术,从那以后这个名称就一直沿用下来(参见 参考资料)。

  近年来,Ajax 已成为用于 “Web 2.0” 应用程序的一个涵盖性术语,而不是一组特定的技术。请求通常是异步的,并且以 JavaScript 发出,但是响应并非总是 XML。在基于浏览器的应用程序的开发中,XML 缺乏本地的、易于使用的 JavaScript 解析器。当然,也可以使用 JavaScript DOM API 解析 XML,但是对初学者而言这并不容易。因此,Ajax Web 服务常常返回纯文本、HTML 片段或 JSON 格式的结果。

  2006 年 7 月,Douglas Crockford 将描述 JSON 的 RFC 4627 提交到 Internet Engineering Task Force(IETF)。当年年末,Yahoo! 和 Google 等主要服务提供商将 JSON 输出作为 XML 的替代品(请参阅 参考资料)。(在本文的后面您将使用 Yahoo! 的 JSON Web 服务)。

0
相关文章