使用Web services和Ajax实现数据自动录入2011-01-11 IBM Norbert (Norb) R. Ry编程思想的一些背景知识美国邮政管理局 (USPS) 提供了多个 Web services。这些 Web services 之一接受邮政区码并返回相应的城市和州的名称。在本文的示例应用程序中,您将使用此 CityStateLookupRequest 来省去用户的一些输入操作。此功能还为您的数据库提供了更好的地址数据,因为它减少了键入错误的机会。先决条件和假设情况构思和创建 Ruby on Rails 的 David Heinemeier Hansson 确实是一位智多星!在 RoR 中,他实现了许多好的思想,这些思想使开发 Web 应用程序更加容易,就像我的一个朋友说的那样“它使编程变得更加有趣了!”我认为,其他框架和编程范例将毫无疑问地支持这些思想。不过,本教程并不是介绍如何创建 RoR 应用程序。本文的假设情况是您已经创建了一个 RoR 应用程序,该程序有一个地址的 HTML 输入表单(例如 590 Madison Ave, New York, NY 10022)。此 Rails 应用程序还有一个名为 address 的模型和一个相应的数据库表。而且,我们还假设您:了解 Web 应用程序开发的一些基本设计原则。已经创建了一个 RoR 应用程序。了解 RoR 应用程序的以下基本部分:ActiveSupport、ActiveRecord、ActionView、ActionController 和 Migrations 等。有一个配置用于 RoR 应用程序的数据库(如 IBM® DB2® 或 MySQL)。通过预见用户的需求与用户联系并知道节省他们时间的重要性。表 1. 假设您有一个具有这些对象的 RoR 应用程序
Ruby on Rails 文件 | 目录 | 描述 |
edit.rhtml | ../app/views/addressadmin | 编辑地址的视图 |
_form.rhtml | ../app/views/addressadmin | edit.rhtml 使用的片段 |
addressadmin_controller.rb | ../app/controllers | HTML 输入表单调用的控制器 |
address.rb | ../app/models | ActiveRecord 对象 |
001_create_addresses.rb | ../db/migrate | 创建 Addresses 数据库表的脚本 |
解决方案概述下表列出了完成此解决方案所涉及的步骤。(不要担心,本文的其余部分将逐一介绍这些步骤。)注意,片段 一词是 Ruby on Rails 的一个术语。它是与 Web 浏览器中显示的内容相关的一个可重用代码段。大多数现代框架都包括某种类型的模板和用于动态组装模板以生成 Web 页的片段功能。片段为应用程序开发人员提供了切实的便利,并极大地帮助他们减轻了开发负担。RoR 命名约定是在片段前面加一个下划线(如 _addressForm.rhtml)。修改 _form.rhtml 片段以便在城市和州之前显示邮政区码。添加一个片段 (_cityState.rhtml) 以显示城市和州的输入字段。修改 _form.rhtml 片段以“侦听”邮政区码字段的更改,并向服务器发出 Ajax 调用。修改控制器以验证邮政区码(5 位数字)。如果无效,则向客户端返回空的 Ajax 响应。修改控制器以创建有效的 XML 请求并发送到 USPS Web services 。修改控制器以便从 USPS Web services 接收和解析 XML 响应。修改 Ajax 响应,为 _cityState 片段填充 Web services 的值。指出改进解决方案的一些方法,并通过电子邮件向作者发送您的建议。图 1. 解决方案概述