这次的AJAX系列, 实际上是我平时所有用过的AJAX实现方式汇总(J2EE环境), 在这些所有的实现方式里面, 我最常用的是使用Prototype发送/接收请求, 隐藏帧技术虽然强悍, 但在客户都不要求回退处理的情况下, 我也一般不使用, 但是, 在此仍然强烈推荐.
让我感到伤心的是, 感觉大家对DWR的关心度更高一些, 实际上, 我从来没有在商业项目中用过DWR, DWR只是我自娱自乐地研究时进行了一些测试. 我不喜欢封装的太厉害的东西, 除非它能给我带来很大的方便. 我并不是排斥DWR, 我只是希望, 各位在使用DWR前, 能够熟练掌握隐藏帧技术及XmlHttpRequest技术, 这是AJAX的基础, 即使切换到.net, PHP等开发平台, 这两种技术仍然可以继续使用, Prototype发送AJAX请求不过是对XmlHttpRequest的封装, 也没有兼容性上的问题, 但对于DWR, 在.net下有一个类似的框架, 叫做AJAX.NET, 在PHP下我不清楚, 但使用DWR意味着, 你的AJAX经验将会绑定到一个固定的平台上, 你的一切AJAX操作, 将会以DWR为核心进行考虑, 这并不是AJAX的本意所在.
本系列重点在于讲述AJAX的各种实现方式, 不涉及更加具体的业务. 例如, 如果返回表格类的数据, 应使用何种格式返回并如何处理等, 如果大家有兴趣, 将开专文讨论. 本文的目的只在于演示, 我从何从客户端发出请求, 从服务器端取得数据, 就这么简单.
现在有种倾向是使用AJAX实现所有的服务器操作, 这个不是我喜欢的方式, 例如分页操作, 本身分页操作就是刷新整个页面(最起码是大部分), 使用AJAX除了增加编程复杂性, 并不会给用户体验带来大的改善.
以上只是本人观点, 如有不同意见, 请勿使用攻击性语言, 拜托.
最近有人针对本文提了一些问题, 例如如何使用AJAX传回表格数据, 以及如何进行级联之类. 算了, 不再开贴子了, 就在这里再多说几句吧, 其实这些问题使用前文的知识都可以解决. 大家使用AJAX, 一定要记住一点, 那就是分清哪些事情应该是服务器做的, 哪些事情是需要客户端完成的. 而客户端与服务器之间的数据传递, 只有一种格式, 那就是字符串, 不可能指望服务器端直接传一个表格或数组给客户端, 当然, 有些框架支持这些对象, 但这正是我反对直接使用框架的原因, 这样给初学者造成了一种错觉, 那就是客户端想要的东西, 都可以在服务器端实现, 客户端只需坐享其成就可以了. 实际情况不是这样的, 只有字符串, 才是两者之间真正传递的数据格式.
以表格数据为例, 例如, 需返回如下表格
最简单的方法是返回如下字符串1,1#1,2$2,1#2,2$3,1#3,2, 客户端获取到这个字符串后, 可以使用String.split方法将其解析为需要的表格数据. 这种方式最简单, 直观, 编程时也很常用. 当然, 这会带来交流上的问题, 如果是一个人搞定的小项目, 这样没啥问题, 如果多人协作, 有人负责服务器端, 有人负责客户端, 这种方式就比较难弄了.
替代的方式是将返回字符串按JSON格式或XML格式返回, 至于客户端如何解析, 请参考本人写的以下两管BLOG
JSON入门
在JavaScript中使用DOM解析XML数据
其它的类似的问题可以均以此方式解决, 关键在于定义返回的字符串格式及客户端的解析程序
让我感到伤心的是, 感觉大家对DWR的关心度更高一些, 实际上, 我从来没有在商业项目中用过DWR, DWR只是我自娱自乐地研究时进行了一些测试. 我不喜欢封装的太厉害的东西, 除非它能给我带来很大的方便. 我并不是排斥DWR, 我只是希望, 各位在使用DWR前, 能够熟练掌握隐藏帧技术及XmlHttpRequest技术, 这是AJAX的基础, 即使切换到.net, PHP等开发平台, 这两种技术仍然可以继续使用, Prototype发送AJAX请求不过是对XmlHttpRequest的封装, 也没有兼容性上的问题, 但对于DWR, 在.net下有一个类似的框架, 叫做AJAX.NET, 在PHP下我不清楚, 但使用DWR意味着, 你的AJAX经验将会绑定到一个固定的平台上, 你的一切AJAX操作, 将会以DWR为核心进行考虑, 这并不是AJAX的本意所在.
本系列重点在于讲述AJAX的各种实现方式, 不涉及更加具体的业务. 例如, 如果返回表格类的数据, 应使用何种格式返回并如何处理等, 如果大家有兴趣, 将开专文讨论. 本文的目的只在于演示, 我从何从客户端发出请求, 从服务器端取得数据, 就这么简单.
现在有种倾向是使用AJAX实现所有的服务器操作, 这个不是我喜欢的方式, 例如分页操作, 本身分页操作就是刷新整个页面(最起码是大部分), 使用AJAX除了增加编程复杂性, 并不会给用户体验带来大的改善.
以上只是本人观点, 如有不同意见, 请勿使用攻击性语言, 拜托.
最近有人针对本文提了一些问题, 例如如何使用AJAX传回表格数据, 以及如何进行级联之类. 算了, 不再开贴子了, 就在这里再多说几句吧, 其实这些问题使用前文的知识都可以解决. 大家使用AJAX, 一定要记住一点, 那就是分清哪些事情应该是服务器做的, 哪些事情是需要客户端完成的. 而客户端与服务器之间的数据传递, 只有一种格式, 那就是字符串, 不可能指望服务器端直接传一个表格或数组给客户端, 当然, 有些框架支持这些对象, 但这正是我反对直接使用框架的原因, 这样给初学者造成了一种错觉, 那就是客户端想要的东西, 都可以在服务器端实现, 客户端只需坐享其成就可以了. 实际情况不是这样的, 只有字符串, 才是两者之间真正传递的数据格式.
以表格数据为例, 例如, 需返回如下表格
Col1 | Col2 |
1,1 | 1,2 |
2,1 | 2,2 |
3,1 | 3,2 |
最简单的方法是返回如下字符串1,1#1,2$2,1#2,2$3,1#3,2, 客户端获取到这个字符串后, 可以使用String.split方法将其解析为需要的表格数据. 这种方式最简单, 直观, 编程时也很常用. 当然, 这会带来交流上的问题, 如果是一个人搞定的小项目, 这样没啥问题, 如果多人协作, 有人负责服务器端, 有人负责客户端, 这种方式就比较难弄了.
替代的方式是将返回字符串按JSON格式或XML格式返回, 至于客户端如何解析, 请参考本人写的以下两管BLOG
JSON入门
在JavaScript中使用DOM解析XML数据
其它的类似的问题可以均以此方式解决, 关键在于定义返回的字符串格式及客户端的解析程序