emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

项目开发告一段落,喘口气,总结一下。

1 AJAX还是AJAH
* AJAX的很多经典应用其实都是利用xmlhttp空间访问后台程序,后台程序返回脚本用eval回调或者返回简单数据的方式来开发。这样的开发模式的好处是设计简单轻巧,对熟悉dhtml的开发者来说上手会比较块,跨浏览器问题也容易解决,做简单的应用也够用。gmail,google suggest都是用这种方式。但是在我看来gmail已经吧AJAH应用到极限了,更复杂的数据结构用简单数据和回调方式来组织就开始有点力不从心了。

* 前AJAX的一种传统做法是后台返回完整的xml文件后用脚本(利用控件)解析xml后操作页面的dom节点来动态生成页面的一部分。这样作的优点是可以充分利用xml的强大表达能力传输各种数据结构,缺点是页面的dom操作效率不高,而且IE在dom操作的API上bug多多。之所以叫“前AJAX”,因为我们在AJAX这个名词出现前已经这样做了很多年了。

* AJAX另一种传统做法是后台返回完整的xml文件后用脚本(利用控件)解析xml后生成html代码再灌回页面的层中。这样的做法回避了页面dom操作的一些问题,在生成的内容比较多的时候利用一些字符串计算的优化技巧(主要是数组和正则的应用)可以相当高效的生成页面。在我看来这是未来的发展趋势。

我现在的项目主要采用的是第三种方式,结合第二种。我使用的是自己的一个小巧的框架,模拟jsp的语法来生成html代码,但是依赖于浏览器的xml解析API,因此难以跨浏览器。google的开源项目ajaxslt提供了一个纯js的xslt解决方式,功能更强大,可以在页面中局部的应用xslt解析xml生成html或者其他形式的数据,但是带来了xslt这个技术门槛。sf上的ZK似乎也不错,但是带来的是xul这个技术门槛,同时后台被绑定在了J2EE服务器上面。

2 CACHE
如果使用xmlhttp控件,在发起http请求的时候IE会包办cache策略,很多时候更新了数据却无法获得更新后的数据。一开始试图用传统方式在URL后面加随机数来强制更新,但是IE仍然距不发出新的请求。
一个解决方法是在后台写expires: 0或者其他的禁止前台cache的头,但是这样在数据没有更新的时候又会带来不必要的服务器压力、响应延迟和带宽浪费。
一个稍微好一点的解决方法是,前台在提交数据以后,需要强制更新数据的时候:

xmlhttp.setRequestHeader("If-Modified-Since","0");

3 系统错误: -1072896748。
用xmlhttp接收到数据的时候经常是用xmldom.loadXML(xmlhttp.responseXML.xml)来判断返回的数据的正确性,但是如果后台送过来不正确的xml的时候有时回触发-1072896748系统错误。这是因为xmlhttp.responseXML已经没有解析到东西了,我们还试图访问它的xml属性而触发的。
解决的方法是在使用responseXML.xml 或者 responseText的时候要做try/catch:
try{var tmp = xmlhttp.responseXML.xml}catch(ex){err=true;}
有些人喜欢catch的时候判断 exception.description=="系统错误: -1072896748。" , 如果客户端不是简体中文版的系统的时候就判断不到了。其实这个地方只要有异常,都必须走异常处理流程了,不用区分的那么仔细。

posted on 2005-11-22 10:24 emu 阅读(8681) 评论(18)  编辑  收藏

评论

# re: 做了两个月ajax,总结一些小经验 2005-11-22 11:01 eamoi
emu好样的。加油,希望看到后续更深入的文章。  回复  更多评论
  

# 太忙了 2005-11-22 13:23 emu
早就想做做些研究,在项目中多实践一些新东西,和大家多分享一些东西,可是实在忙。上周基本上都是晚上11点后下的班,星期天好一点,6点多就回去了。疲于奔命,很多事情都做不了。有心想替公司挖几个高手过来帮忙,可惜高手们都请不动。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-22 14:45 huangyi
我觉得用xsl把xml转成html要方便许多 尤其xml复杂的时候  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-22 16:30 emu
对熟悉xslt的开发人员来说当然是如此了。可是要把人家全部拉过来培训xslt阻力也不小啊,只能指望下面的项目能不能用上。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-23 23:01 BlueO2
公司既然不是做ajax产品框架,而是做应用,为什么不应用现有的框架呢?比如dwr  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-24 09:17 emu
公司不做java的,DWR这样的java后台框架也确实支撑不起我们这样庞大的后台压力。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-28 11:43 Henri
Writing AJAX web applications is definitly not a low cost job. And ZK(http://zk1.sourceforge.net) is aimed at making developing AJAX web applications as easy as developing a traditional desktop windows applications. There is no need to learn javascript and DOM and XMLHttpRequest. ZK hides all these away. XUL in that meaning is actually an easy to lean markup language to design rich GUI pages and you write all your control and data biding codes in pure java.

However, ZK is expected to release next version which will support xhtml tags directly to enable those majority of html web page designers to write AJAX web applications.

ZK is a java servlet-based presentation engine. All you need is a java servlet engine (e.g. Tomcat, Jetty, etc.). As for JavaEE, we do support it but you don't need the full set. ZK is made as thin as possible a presentation engine and it is only for presentation only. Therefore, you can use it with Spring, Strut, Hibernate, Jdbc, etc... without limitation.

Here is the Live demo, maybe you want to give it a try. (http://www.potix.com/zkdemo/userguide)

Henri  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-11-28 22:10 emu
>>All you need is a java servlet engine

当我还在做java的时候,我会觉得这是多么理所当然的要求啊,可惜从java世界走出来的时候才发现,java并不总是最好的答案。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-12-02 19:24 chenqj
ajaxslt只支持ie6.0以上的版本,这点比较郁闷  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2005-12-03 15:43 emu
不会吧,看来我得赶快去加入这个项目了  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-01-11 10:24 呵呵
>>当我还在做java的时候,我会觉得这是多么理所当然的要求啊,可惜从java世界走出来的时候才发现,java并不总是最好的答案

有的时候答案好不好不是关键,关键是别人要这个答案 :)  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-05-25 20:10 pc
http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=1106514212512 java线程的缺陷(上)
http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=200644231255 Java反编译的研究
http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=20064614542 Java实现ftp功能(源程序)  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-05-26 09:52 交流交流
有没有考虑用JSON格式来传递数据?我想,在web应用中JSON比较高效些。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-05-30 10:55 老鼠
呵呵:)

谢谢emu的经验共享:)

我想把您这篇文章转走,可以吗?

如果您有疑问,请在此留言或给我E-MAIL,谢谢:)

cammy.sun@hotmail.com  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-07-13 09:18 unifly
可以考虑下JSON;
干吗不用好的框架;
建议看看Ajax in action;
http://www-128.ibm.com/developerworks/cn/java/j-ajax2/;
  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2006-07-15 14:39 emu
呵呵,有用框架的高手、写框架的高手和不用框架的高手的。
json我通常直接通过script来引用,而不是通过xmlhttp(request)来获取,这样需要做的事情更少。这个话题上和meizz有过一些讨论,不过这是另一个话题了,一篇日志中不可能什么都讲的。  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2009-05-21 17:07 藏獒
ajax,高级东西啊,我HTML都用不好会的哦.  回复  更多评论
  

# re: 做了两个月ajax,总结一些小经验 2009-05-21 17:07 魔兽世界私服
学习了....  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: