注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → 编程开发AJAX → 文章内容

打造可靠的 Ajax 应用程序,第 2 部分: 构建 Ajax 后端

作者:Ajax 来源:本站整理 发布时间:2008-5-26 10:40:08
后端处理 — 服务器端脚本和程序 — 并不总能一投入到 Ajax 应用程序中就很好地运转。相反,若能仔细地提前规划以确保数据以恰当及有效的格式发送,反而能让整个应用程序更内聚,并能减少不必要的复杂性。在本文中,Brett McLaughlin 展示了一个好的服务器端脚本如何能补足 Ajax 行为。

在本系列的 第 1 部分,我们在 Nathan Smith 的 Hoverbox 代码(到初始 Hoverbox 代码的相关链接可以在 参考资料 部分找到)的基础上构建了一个视觉上异常丰富的前端来展示图片库。通过这个处理过程,您了解了一些基本的 UI 原则:人眼遵循的 Z-模式、保持页面一致性、如何减小从页面滑下的框中文本字体的大小以及 serif 和 sans-serif 字体的可读性间的差异。

完成第 1 部分的操作之后,您应该有了一个很像样的图片库,如图 1 所示,这就是我们在第 1 部分中完成的那个 Hoverbox UI:


图 1. 在第 1 部分中完成的 Hoverbox UI
在第 1 部分中完成的 Hoverbox UI

在本篇文章中,我们将添加关键的后端处理以及一些特定于 Ajax 的代码以将图片库连到后端。

准备好 Ajax 管道处理

正如我先前提到的,Ajax 的大部分工作都是进行管道处理:设置好 XmlHttpRequest 对象、调用服务器端程序并获得响应。程序可能会改变,有关请求的细节可能不同,但不管在何种情况下,基本的设置都是相同的:

  1. 创建新的请求对象(最好是以跨浏览器的方式)。
  2. 构造一个请求 URL,可能还要 POST 请求数据。
  3. 设置一个方法,当从服务器收到响应时,用此方法为浏览器进行回调。
  4. 发送请求。
  5. 构造一个回调,此回调可以运行和执行 程序想要对服务器数据进行的任何操作。

更多细节可以在其他文章中(参见 参考资料 部分)找到,所以我们这里只给出一个大概。

创建响应对象

首先,我们需要一个类似 XmlHttpRequest 的响应对象。让我们先来以独立于浏览器的方式创建一个。清单 1 是所需的代码:


清单 1. 创建一个请求对象

/* Create a new XMLHttpRequest object to talk to the Web server */
var request = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    request = false;
  }
}
@end @*/

if (!request && typeof XMLHttpRequest != 'undefined') {
  request = new XMLHttpRequest();
}

我将上述代码保存到了名为 hoverbox-ajax.js 的文件中,我们将用该文件保存所有用于 hoverbox Web 应用程序的 JavaScript 代码。然后,需要在 HTML 的 head 元素中引用此文件:

<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script language="JavaScript" src="hoverbox-ajax.js"> </script>
<title>Hoverbox Image Gallery</title>
<link rel="stylesheet" href='css/hoverbox.css' type="text/css" 
  media="screen, projection" />
<!--[if IE]>
<link rel="stylesheet" href='css/ie_fixes.css' type="text/css" 
  media="screen, projection" />
<![endif]-->
</head>

我们需要一个服务器端规范

现在,我们就可以实际连接到服务器端脚本并获得有关每个图像的一些信息。但该脚本可以接受哪些输入呢?输出又是什么格式呢?让我们试着让事情更趋于真实一些:假设您对服务器端代码没有完全的控制权。也可能获取数据的脚本已经写好,目前在做的只是构建一个新的支持 Ajax 的前端。或许您无需处理 PHP — 这类事由他人负责。不管怎样,您都需要知道脚本的一些规范以及该如何与其通信。

如下是应用程序需要与之通信的脚本的一个简要规范:

Ajax 应用程序经过沙箱处理

构建到 XmlHttpRequest 对象中的安全性机制之一是沙箱处理。简单地讲,这意味着运行在给定域(比如 newInstance.com)的 JavaScript 代码只能对同一域中的脚本发出请求。所以如果某脚本运行在本地机器上,那么它只能请求这个本地机器上(可能是本地机器上运行的 Web 服务器,比如 Apache 或 IIS)运行的其他脚本。

就本文而言,这意味着您的 Web 页面上的 JavaScript 不能调用 newInstance.com 上的代码,原因是您的页面没有在我的 Web 服务器上使用服务。您需要根据自己的具体设置调整本文中所提及的 URL。您可能还会想要简化服务器端脚本(在后续几个章节中会详细介绍)以便在没有对数据库的访问权限的时候,不会用到该数据库。

  • 脚本保存于特定的 URL。在文本,我们使用 http://www.newInstance.com/ajax/lookupImage.php
  • 脚本只接受单一输入:所需查看的图像名称。名称不应该有路径,也不应该有扩展名。所以对于像 img/photo07.jpg 这样的引用,脚本想要的只是 “photo7”。
  • 脚本会返回图像名、标题、数据和描述,均用管道符分隔。

通常,您具有足够的信息可以让您返回到 JavaScript。但如果那样的话,您就没有机会尝试实际的脚本了,所以让我们稍微绕下路,实际构建一下规范所描述的 PHP 脚本(和 MySQL 数据库)。这样,您就能够实际在自己的机器上运行此应用程序了。

一点 PHP……

在设计应用程序时 — 尤其是可以在其中编写 JavaScript 的 Web 应用程序 — 您通常都不能决定您与之交互的数据库以及您连接到的服务器该如何运转。更多的时候是要遵循给定的规范或是一组示例输入所指定的格式。

为了能在一定程度上说明上述情况,我们将会构建一个简单的 PHP 脚本,而且不过多地考虑 Web 表单该如何设计。考虑如下的一个实际例子:有人将一个脚本交由您处理或至少给出了该脚本如何工作的细节。输入不多,但没关系,您是 Web 方面的专业人士,您应该知道如何处理最奇异的数据格式,对么?

PHP 脚本

由于这实际上更多涉及的是客户端,而且您也不过刚刚得到服务器端的规范,所以清单 2 给出了针对此服务器的 PHP。您既可以对其进行深入研读也可以完全忽略它。但要确[1] [2] [3] [4] [5]  下一页


  • 打印文档
  • 推荐好友
  • 返回顶部
  • 增大字体
  • 减少字体
关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved