- 浏览: 1576044 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
可立即使用这些非常有用的 Ajax 设计模式 |
级别: 中级 Jack D Herrington (jherr@pobox.com), 高级软件工程师, Leverage Software Inc. 2007 年 3 月 20 日 Asynchronous JavaScript + XML(Ajax)无疑是 2006 年最热门的技术术语,且有望在 2007 得到进一步发展。但是对您的应用程序来说它究竟有什么意义呢?Ajax 应用程序中哪一种常见架构模式应用最广泛呢?本文将介绍五种常见 Ajax 设计模式,可以使用它们作为工作的基础。<!----><!----><!----> 的确,Ajax 是 Web 2.0 热门术语,所有人都希望将其应用于自己的站点。但是它对我们究竟有什么意义?工程师该如何在架构的层面上将其集成到自己的站点中?在这篇文章中,我将介绍 Ajax 的基本知识,并展示一些已经成为 Web 2.0 开发最佳实践的 Ajax 设计模式。
首先,Ajax 仅仅是一个涉及一组技术的术语,包括 Dynamic HTML(DHTML)和 这两种元素的组合 —— 从服务器动态请求数据然后使用这些数据更改页面 —— 就是 Ajax 的本质,也是 Web 2.0 站点的动态特性。 但这并没有真正告诉您如何实际应用这些特性以及如何在站点中使用它们。因此,需要一组简单的设计模式。 如果您对这个术语感到陌生,本文推介了一本非常优秀的同名书籍(参见 参考资料)。这本书针对工程师经常面对的任务提供了一组实现模式。它不仅提供了设计系统的最佳实践,还介绍了工程师谈论代码时用到的术语。 本文介绍了五种常见 Ajax 设计模式。它们在使用 HTML、XML 和 JavaScript 代码从服务器获取数据方面有所不同。我先介绍最简单的模式,它将使用来自服务器的新 HTML 页面来更新页面。 最常见的 Ajax 任务也许就是向服务器请求更新的 HTML 并使用它更新部分页面。可能需要周期性地完成这一任务 —— 比如,更新股市报价。也可能要按需更新 —— 比如,对搜索请求进行响应。 清单 1 中的代码从服务器请求一个页面然后将内容放入页面主体的 清单 1. Pat1_replace_div.html
清单 2 展示了代码请求的内容。 清单 2. Pat1_content.html
在 Firefox 中加载页面后,可以看到 图 1 所示的结果。 图 1. 替换了 <div> 标记的页面 现在回到 清单 1 中的代码,来观察一些内容。第一个要注意的是
将 暂时回到 该模式的另一种变体就是创建一个选项卡样式的显示。 清单 3 展示了一个简单的选项卡式 Ajax 界面。 清单 3. Pat1_tabs.html
清单 4 显示了第一个选项卡的内容。 清单 4. Pat1_tab1_content.html
清单 5 显示了第二个选项卡的内容。 清单 5. Pat1_tab2_content.html
当我在自己的浏览器上显示该页面时,我看到了第一个选项卡,如 图 2 所示。 图 2. 第一个选项卡的内容 然后单击第二个选项卡的链接。浏览器检索第二个选项卡的内容然后将它显示在选项卡区域,如 图 3 所示。 图 3. 第二个选项卡的内容 这是该设计模式的最典型用法 —— 从用户那里获得请求并使用新的内容更新部分显示,本例演示了创建选项卡显示的技巧。应用程序端的价值就是您可以为用户下载非常轻量级的页面,用户可以根据自己的需求访问这些内容。 在 Ajax 出现之前,最常见的技术是将所有的选项卡都放在页面上,然后根据需要显示或隐藏它们。这就是说即使从来不查看第二个选项卡,也会为其创建 HTML,既浪费服务器时间又浪费带宽。使用这种新的 Ajax 方法,只有当用户请求第二个选项卡时才会为其创建 HTML。
该模式的另一个变化就是 Read more 链接,如 图 4 所示。 图 4. 我的博客登录处的 Read more 链接 假如想希望阅读更多关于我遛狗的经历,可以单击 Read more 链接,使该链接替换为完整的故事,如 图 5 所示。 图 5. 单击 Read more 链接后显示的页面 这样做的好处是顾客可以在无需刷新页面的情况下获得更多内容。 清单 6 显示了该页的代码。 清单 6. Pat1_readmore.html
清单 7 显示了 “read more” 部分的内容。 清单 7. Pat1_readmore_content.html
这些代码演示的是 为页面获取新的 HTML 只是其中一件事情,如果您希望 JavaScript 代码在页面中使用数据执行一些更智能化的任务该怎么办呢?如何使用结构化的方式将数据发送到浏览器呢?毫无疑问,这正是使用 XML 的原因。
出于某些原因,Ajax 已成为 XML 的同义词,尽管 XML 不是绝对必要的。从上面几个例子可以看出,您完全可以返回简单的文本甚至是 HTML 片段 —— 或者 Extensible HTML(XHTML)—— 代码。但是发送 XML 自有其优势所在。 清单 8 显示的 Ajax 代码首先向服务器请求图书记录,然后将数据显示在页面内的表格中。 清单 8. Pat2_xml.html
清单 9 显示了该页面的数据。 清单 9. Pat2_xml_data.xml
在浏览器中加载页面时,我看到了如 图 6 所示的结果。 图 6. XML 显示页面 此页面和上一个模式中显示的页面之间最大的区别就是 通过使用 这是 XML 数据的最基本应用。更复杂的 JavaScript 代码可以执行客户端排序或根据返回的数据进行搜索。 遗憾的是,传递 XML 数据的缺点是需要浏览器多花费一些时间来解析整个 XML 文档。同样,JavaScript 代码在 XML 中查找数据也很复杂(参见 清单 8)。一个替代办法是从服务器请求 JavaScript 代码。
从服务器请求 JavaScript 数据这种技术通常用于 JavaScript Object Notation(JSON)这种良好的代码。返回 JavaScript 数据的优点就是能够使浏览器高效地解析并创建使用起来更加简单的 JavaScript 数据结构。 让我们将 清单 8 中从服务器读取 XML 的代码修改为从服务器读取 JavaScript 数据的代码。新代码如 清单 10 所示。 清单 10. Pat3_js.html
所有的 HTML 代码保持不变。 清单 11 显示了来自服务器的 JavaScript 数据。 清单 11. Pat3_js_data.js
为什么众多 Ajax 应用程序工程师更喜欢使用 JavaScript 代码而不是 XML 来对数据编码?答案很明显。JavaScript 代码更容易读取和管理,并且也更容易被浏览器处理。 收集和显示所有的数据之后,即可看到 Ajax 的重点就是显示当前数据 —— 当前 最重要的部分。那么,如何保证总是能够从服务器获得最新的数据呢?
浏览器会尝试化 Web 流量,所以如果您对同一个 URL 请求两次,很可能还不如重新请求一次页面,您的浏览器将仅仅使用浏览器缓存中存储的页面。所以,Ajax 应用程序中另一个常见模式是使用 URL 中的随机元素来保证浏览器不会返回一个缓存的结果。 我最喜欢的技巧就是向 URL 添加当前时间的数字值。 清单 12 展示了这一技巧。 清单 12. Pat4_cache.html
代码取自 清单 1,对 URL 字符串执行了一些额外的 JavaScript 文本操作。我将 URL 连接到一个新的参数
最后要演示的这个模式是第一个模式的高级版本:包含来自服务器内容的 为更新显示页面中的多个区域,我使用了服务器的 XML 响应,它包含每个部分的数据。然后,使用一个正则表达式将响应分解为单个部分。清单 13 显示了这种技巧。 清单 13. Pat5_multi_segment.html
清单 14 展示了来自服务器的数据。 清单 14. Pat5_data.xml
在浏览器中加载这段代码时,将看到 图 7 所示的结果。 图 7. 使用服务器的数据更新显示页面中的两部分 在页面代码中,我还可以使用 XML 响应,因为服务器返回的是有效的 XML。但是使用正则表达式比从 XML 代码中分解单独部分更加简单。
Ajax 的功能之强大与之被误解和误用的程度相当。本文中演示的模式为在 Web 应用程序中使用 Ajax 提供了一个不错的起点。除了使用这里提供的代码,我还建议您关注以下 Web 2.0 革命带来的某些出色的 Ajax 和 Web UI 库。其中最主要的是 Prototype.js 库,它提供了向浏览器发送以及从浏览器获取数据的简便方法,以及浏览器间兼容的方法更新 Web 页面内容。使用这些库的价值在于工程师可以在广泛的浏览器和平台上专注地维护和测试它们,这样可省去大量的工作和麻烦。 无论从哪方面说,就像本文中的模式演示的那样,Ajax 可以为您的应用程序添加动态行 |
发表评论
-
几个不错的ff下调试插件
2009-12-11 11:14 1848记录一下经常使用的ff插件,其中firebug、switchh ... -
20 种提升网页速度的技巧
2009-04-15 20:19 1243From:http://www.ibm.com/develop ... -
25 个在 Web 中嵌入图表的免费资源
2009-04-14 21:27 1656From: http://www.cnbeta.com/art ... -
15个网站用户体验优化禁忌
2009-04-08 22:57 1167From:http://www.blueidea.com/de ... -
让IE8兼容IE7
2009-03-27 15:10 4175今天在搜狐首页发现:<meta http-equiv ... -
FF下分析页面加载的工具
2009-03-25 16:03 2465今天同事推荐YSlow作为 ... -
IE6下页面显示空白的问题
2009-03-24 17:01 5298今天又碰到了一个页面在IE6下加载完后一片空白的问题,而且页面 ... -
支持IE6、IE7的关闭页面的函数
2009-03-17 15:40 1692function closeWin() { var isI ... -
很弱很无奈的一段代码(打开的页面更新父窗口的链接)
2009-03-12 11:51 1012if(parent.window.opener) { pa ... -
js小脚本
2009-02-26 10:13 1538清除元素: var clearNode = functio ... -
处理一次性事件的模式
2009-02-12 20:20 1240有的时候我们需要给一个标签增加一次性的事件,比如先在输入框中增 ... -
Linux:rsync服务器的快速搭建和使用
2008-12-30 10:15 1318From: http://tech.ddvip.com/200 ... -
js导致的页面空白问题
2008-12-29 13:45 3127今天遇到一个很奇怪的问题,系统的一个页面在一台机器上无法完全展 ... -
IE6下history.back无效的问题
2008-12-26 23:56 3788解决IE6中history.back()无法返回的问题:< ... -
浏览器兼容比较好的设置min-width的方式
2008-12-12 18:45 2533<!DOCTYPE HTML PUBLIC " ... -
CSS代码分享:浏览器CSS Reset方法十例zz
2008-12-07 18:06 1152From: http://www.52css.com/arti ... -
在Javascript中,什么是闭包(Closure)
2008-12-02 11:11 1035from: http://javascript.chinaht ... -
Unicode、GB2312、GBK和GB18030中的汉字[转]
2008-11-25 15:22 3839From: http://blog.csdn.net/fmdd ... -
空字符串的split
2008-11-21 19:16 1556本来以为是零,但是在java和js里试了以后发现居然都是1,很 ... -
docType 相关的loose.dtd导致的无法获取scrollTop的解决
2008-11-19 11:32 1660function iecompattest(){ retu ...
相关推荐
基于flask和echarts的中国疫情数据大屏可视化项目 技术栈: html ajax JavaScript python:requests flask 实现流程: 数据来源:腾讯实时疫情 https://news.qq.com/zt2020/page/feiyan.htm#/ 具体数据在: ...
ZT213/ZT213LEEA是一款专为低功耗应用设计的RS232多通道USB收发器和驱动器芯片,广泛应用于数据通信、工业控制、物联网设备等领域。本文将深入探讨其规格参数、功能特点、选型指南及应用实例,帮助读者全面了解这款...
这份中文手册详细地介绍了ZT411和ZT421的操作、维护以及常见问题的解决方法,对于用户来说是一份非常重要的参考资料。 一、打印机概述 ZT411和ZT421是斑马技术公司推出的一系列高级热转印桌面打印机,具备高速打印...
赠送jar包:zt-exec-1.9.jar; 赠送原API文档:zt-exec-1.9-javadoc.jar; 赠送源代码:zt-exec-1.9-sources.jar; 赠送Maven依赖信息文件:zt-exec-1.9.pom; 包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-...
Java处理XML文件是Java开发中的常见任务,XML(Extensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储以及文档结构化等场景。本篇将详细讲解Java处理XML的相关知识点,主要涵盖以下几个...
ZT13085E的设计目标是提供一种高效、可靠的数据传输方式,尤其是在长距离和噪声环境下的通信。 首先,我们来了解一下RS485标准。RS485是EIA(Electronic Industries Association)制定的一种电气接口标准,它允许在...
- 碳带类型:ZT210和ZT230支持中心穿孔或边穿孔的碳带,材质有蜡基、混合基和树脂基,每种类型对应不同的耐用性和打印清晰度。 - 尺寸匹配:碳带的宽度应与介质相同或稍宽,长度则应足够覆盖所有打印需求。 - ...
斑马zt210是一款专为中国市场设计的工业条码打印机,非常适合不需要频繁更换标签的条码标签应用。...斑马zt210打印机优势:◆ 节省空间* 小巧紧凑和流线型设计可轻松放入空间非常有限的狭小,欢迎下载体验
赠送jar包:zt-exec-1.9.jar; 赠送原API文档:zt-exec-1.9-javadoc.jar; 赠送源代码:zt-exec-1.9-sources.jar; 赠送Maven依赖信息文件:zt-exec-1.9.pom; 包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-...
ZT7548是一款第五代电容式触控屏幕控制器,支持30x18或18x30的通道配置,可以同时检测最多10个触点。该控制器能够与最多8个键与TSP(触控屏面板)或FPC(柔性印刷电路板)模式一起工作,在多点触控时无扫描率下降的...
ZT-2570:数据收集,负责主动访问或下命令给ZT-2055 IO输出输入状态,或与2571做数据传输(工作模式:透明模式)。 ZT-2571:做路由器或可与2570做资料传输(工作模式:透明模式)。 ZT-2055:终端设备,控制终端...
"斑马zt410中文库"指的是为ZT410打印机特别设计的中文字符集和字体库,确保在打印中文标签时能够清晰、准确地输出汉字。 1. **斑马ZT410打印机特性** - 高性能:ZT410采用强大的32位处理器,提供快速打印速度,...
- 快速参考指南中包含了常见问题的解决方案,例如打印质量下降、打印机不响应等问题,用户可以按照指南进行自我诊断和修复。 8. **网络连接** - 对于ZT230系列,除了传统的USB接口外,还支持以太网连接,可以方便...
本用户指南旨在为Zebra ZT210/ZT220/ZT230打印机的用户提供操作和维护指南,该设备是一种工业级的条码打印机,具有高速打印、高速处理和高质量打印输出等特点。 版权信息 本手册的版权和这里描述的打印机软件和/或...
斑马打印机ZT210是一款专业的工业级条形码和标签打印机,广泛应用于物流、零售、医疗等行业的标签制作。以下是对如何设置和使用斑马ZT210打印机的详细步骤: 首先,我们需要安装电脑驱动。双击下载好的驱动程序文件...
标题中“ZT2835W0M1贴片发光二极管规格书”指的是中之光电科技有限公司生产的型号为ZT2835W0M1的中功率贴片LED灯珠的相关技术参数和使用说明文档。这种LED具备2.8mm×3.5mm×0.8mm的封装尺寸,具有超长使用寿命和防...
7. **README**:说明文件,可能包含了安装步骤、依赖项和常见问题解答。 在实际开发过程中,开发者需要根据自己的嵌入式系统平台(如Linux、RTOS等)选择合适的驱动和库文件,并参照文档和示例代码编写应用程序。在...
ZK-ZT2调速器支持四种运行模式:手动(人工)控制、自动控制、上位机控制和串口控制。这四种模式可实现直流电机的正反转、停止、刹车以及调速功能,并支持可编程运行。通过拨码开关,可以切换手动或自动控制模式,并...