I scanned the content index of this book, and it should be facing beginners. So I will continue to learn Ajax by this book.
Chapter 1. What Is AJAX?
当然是讲历史,不过是偏重应用情况的历史多过于开发情况的历史,给了些技术细节的发展过程和在著名项目里的应用。
Chapter 2. Getting Started
2.1. XMLHttpRequest 概览:
readyState Status Code Status of the XMLHttpRequest Object
(0) UNINITIALIZED The object has been created but not initialized. (The open method has not been called.)
(1) LOADING The object has been created, but the send method has not been called.
(2) LOADED The send method has been called, but the status and headers are not yet available.
(3) INTERACTIVE Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available.
(4) COMPLETED All the data has been received, and the complete data is available in the responseBody and responseText properties.
上面这个表的内容罗列了readyState这个属性的各个值的含义,这个是迄今为止我见到的对于这个变量的解释最有用的,因为这个属性是用来标识XMLHTTPRequest对象的工作状态的,在server的交互中它很重要。
2.2. 跨浏览器的 XMLHttpRequest:
这个话题是针对IE6还没实现XMLHTTPRequest,但是从IE7开始,创建这个对象的做法已经和其他浏览器都一致了。所以此处略去。
2.3. 发送异步请求:
这节里作者提供了一个将XMLHTTPRequest包起来的做法,即是让它的基本在操作在不同浏览器里都用相同的API。其实这更像是一个代理类。这个代理类本身怎么写的我倒不是很有兴趣(暂时来讲),可是里面有一个很有价值的提醒,就是onreadystatechange,这是XMLHTTPRequest的一个属性,用来指定:当readyState的值变化时,执行哪个回调函数。比如你可以在用Ajax发送一些请求之后和收到回复数据之前做一些动画告诉用户发生着什么,这样就可以给用户一个很友好的体验。
2.4. 没有XMLHttpRequest的情况下,AJAX怎么做?
这个问题我暂时不关注,我不打算用IFrame或者Cookies的办法,所以下面两节也略去,这一章就这么结束了。
Chapter 3. Consuming the Sent Data
3.1. 以文档为中心的方法:
这个称呼(Document-Centric)是与远程脚本(Remote Scripting)相对应的。概念在这节不重要,这节介绍的是Ajax最常用来做的事情,就是从服务器端获取一些信息,然后将这些信息插入到当前的页面里,通过使用DOM里的innerHTML还有一些方法。至于传递的信息以何种格式,作者介绍了HTML,XML还有XSLT。后面这个东西我没见过,它的格式看起来是XML的一种扩展,但是它可以含有一定逻辑,当然解析它的任务是浏览器来做,我们只是调用API获得结果,但是貌似各大浏览器对XSLT的支持还有些不平衡。
3.2. Remote Scripting:
按照作者的意思,在大多数语境下,这个概念等同于RPC-(Remote Procedure Call)。就是用浏览器的脚本调用服务器上的具体函数,这个概念里有个中心,即:客户端上的脚本代码基本上和服务器端的函数是一一对应的,至少也是耦合性很强的。相对应的,上面的以文档为中心的方法就是耦合性很弱的。RPC概念里还有个重点,就是那张图展示的流程:
这么多概念把本来简单的东西搞得很复杂。图中所谓的serialize(序列化),其实就是说各个语言有自己的数据类型和格式,如果就直接把数据按照自己的格式发过去,那对方都会看不懂,所以先把数据转换成一种大家都可以接受的格式,比如说XML或者JSON。
看了这一节之后真的感觉这本书太老,就连在PHP里接收XML,然后解析XML还得要先安装挂件,这得是多少年前的PHP啊。而且作者也实在太纠结于概念和术语了,把问题一再复杂化。其实就是一个简单的Ajax发给PHP交互数据的问题,这里可以直接像form那样把参数传给PHP,也可以把数据放在XML或者JSon这样的格式化数据里传过去。而且,除了单纯的数据外,你也可以把要执行的函数名放在XML或者JSON里,来告诉服务器端你想要执行的逻辑,当然服务器端也可以在返回数据时顺便再指定给客户端要执行的函数。
总之就是,你有几种方式传数据,另外,处理数据的逻辑你可以全放在服务器端,也可以一部分放在服务器一部分放在客户端,另外还有一个简便的做法,就是让服务器直接返回一段Js代码,在客户端就用eval()直接执行它,当然你要注意一些安全上的隐患。
Chapter 4. Adding AJAX to Your Web Development Process
4.1. 开发周期的变化:
4.2. 集成AJAX到一个框架里:
。。。
这一整章都是在泛泛地介绍用Ajax开发的经验,一些设计实现上的策略,还有如何选择框架等等。。。
Chapter 5. Getting the Most from AJAX
5.1. AJAX的目标:
5.2. 增强结果的测评:
这里给出一个基于PHP服务器端的方法来计量一个Ajax的请求到底需要花多少时间来完成。
5.3. 将AJAX与其他技术合起来使用的前提与问题:
Chapter 6. Usability Guidelines
6.1. 可用性的定义:
关于这个定义,作者引用的是ISO的:"the extent to which a product can be used by specified users to achieve specified goals with effectiveness, efficiency and satisfaction in a specified context of use." 然后作者解释了其中五个标准的含义:Learnability(是否容易上手),Efficiency(操作便捷性),Memorability(意思是如果用户有一阵子不用了,再用时是不是还能记起怎么操作),errors(是否容易出错,以及从错误中自动恢复的能力),satisfaction (满意度,这个比较主观)。
6.2. 可用性的纲要:
6.3. 常见的可用性问题:
Chapter 7. AJAX Debugging Guide
7.1. 调试的两个方面:
7.2. 检视AJAX通讯:
主要是介绍了怎么用Firebug和Fiddler来检视在server和客户端之间传递的数据。还有如何在server端用PHP写一个日志功能。
7.3. JavaScript调试工具:
7.4. JavaScript异常:
7.5. 输出变量:
这里介绍了一个叫HTML_AJAX的框架,可以用来帮助调试Javascript代码。其中有个叫varDump的函数。
Chapter 8. Libraries Used in Part II: Sarissa, Scriptaculous
略
Chapter 9. Libraries Used in Part II: HTML_AJAX
作者着墨这么多来讲这个库,主要还是因为作者本人就是其开发团队的领导者。可是在实际中我没见过有谁用它,我觉得主要原因是它是一个同时包装了服务器端与客户端的库,两边的函数必须要配合使用,也就是说耦合性太强,这样导致的问题就是,一旦你用了它,那么当你需要在客户端使用别的库来做一些它做不到的功能时,你可能会遇到不兼容的问题,所以这样的设计扩展性和灵活性都不高。这或许是不流行的原因吧。。。完全是我的猜测。
Chapter 10. Speeding Up Data Display
这一章其实是个case study,作者用一个显示城市日出日落的数据的案例。可是这个例子里作者不仅使用了他的HTML_AJAX,还用到了PEAR里面的Image_Graph类来生成图片。我的server上面没有PEAR,而且貌似现在用GD来生成图片的做法多一些。不过最终我还是决定试一试这个案例,因为我还没接触过用PHP生成图片的功能,了解一下未尝不好。但是之后用Ajax的部分我就未必继续了,因为我暂时对HTML_AJAX没有兴趣。
这个案例的前一半是做一个没有AJAX版本的网页。
不过还是要先搞定PEAR的安装,我想起之前看的两本书里有介绍。
《PHP5及MySQL宝典》- 第二十八章。
首先来界定下PEAR的概念,关于这个词所包涵的含义,有几点:
1.它是一个用PHP写的函数库,或模块库,程序员可以在PHP文件里通过include或者require来加载。
2.它是一套工具和标准,通过这套工具和按照这套标准,任何人可以开发自己的模块,并将其共享到PEAR库里面,所以PEAR是一个公共的开放的系统,它的代码都是免费的,而且它本身也提供一套很成功的管理机制来处理这种共享行为。
3.某些PEAR里的函数,成为了PHP本身的基本函数。
《PHP & MySQL All in One for Dummies》
先要安装PEAR管理器:
在我的PHP安装路径下,有go-pear.bat和\PEAR\go-pear.phar两个文件,这应该是PHP自带的。但是关于如何安装,以及不同的安装文件究竟是用来安装还是更新还是都可以,还有每种安装情况下路径如何设定才是正确等等等等问题,我发现网上有不一致的说法,所以我决定还是暂时搁置这个东西,在这里先只罗列一些我搜集到的网址:
这里提及,如果是PHP5.1之后的版本最好不要使用PHP安装路径下自带的批处理来安装PEAR,而是通过使用web版的PHP文件,即在cmd里敲指令:
$ php go-pear.php
这个做法的好处是,你要是因为某些原因不能通过指令运行PHP,你也可以把PHP上传到你的空间里去然后在浏览器里执行它来完成安装。
http://packtlib.packtpub.com/library/9781904811190/ch01lvl1sec03
http://pear.php.net/manual/pt_BR/installation.introduction.php
http://pear.php.net/manual/en/installation.getting.php
或许这一章应该就此放弃了。
Chapter 11. Adding an AJAX Login to a Blog
11.1. 为何登陆模块用Ajax来做更好:
这整个一章,其实就是以一个极其不实用的登录模块作为案例。而且还用了HTML_AJAX和一个叫Sarissa的框架。至此我想这本书的阅读可以算完成了,因为其中有价值的部分我已经都仔细看过了,可能是因为Ajax并没有比单纯的Javascript多太多的话题和技术点,所以我没觉得这本书有太大价值,至此我也不再打算看单纯介绍Ajax的书了。
我想我应该看一本《Ajax And PHP - Building Responsive Web Applications》,介绍Ajax和PHP如何一起使用的书,它或许能一共一个整体的大视野来关照Ajax应该如何使用和设计的问题。不过这本书出版于2006年,所以也有可能介绍的东西太古老的问题。
当然也可以看一本叫《JavaScript in 10 Steps or Less》,做一下其中的案例,来多些了解Javascript的实际操作。
另外我应该开始研究一些搜集的Ajax源码的案例,或者开始看JQuery以及其他一些框架的教程。