Welcome

首页 / 脚本样式 / Ajax / 使用Web services和Ajax实现数据自动录入

使用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/addressadminedit.rhtml 使用的片段
addressadmin_controller.rb../app/controllersHTML 输入表单调用的控制器
address.rb../app/modelsActiveRecord 对象
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. 解决方案概述