`
riali
  • 浏览: 41627 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

做了两个月ajax,总结一些小经验

阅读更多

原文 http://www.blogjava.net/emu/archive/2005/11/22/20888.html

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

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这个技术门槛。

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。" , 如果客户端不是简体中文版的系统的时候就判断不到了。其实这个地方只要有异常,都必须走异常处理流程了,不用区分的那么仔细。

分享到:
评论

相关推荐

    Ajax离线开发文档

    3. **请求类型与状态**:Ajax支持GET和POST两种请求方式,GET用于获取数据,POST用于提交数据。请求的状态可以通过XMLHttpRequest对象的readyState属性来检查,常见的状态有0(未初始化)、1(加载中)、2(已加载)...

    Ajax案例.rar

    ASP.Net AJAX框架包括两个主要部分:客户端库和服务器端扩展。 1. 客户端库:包含JavaScript库(ScriptManager, UpdatePanel, ScriptResource.axd等),这些库提供了异步调用、页面更新、脚本服务支持等功能。 2. ...

    ajax多级联动案例代码

    在这个案例中,我们有两个关键文件:`faq.sql` 和 `ServletTest`。`faq.sql` 文件可能是数据库脚本,用于创建一个包含多级菜单数据的数据库表。可能包含如下结构: 1. 表名:`categories` 2. 字段:`id`(主键,...

    Flex Ajax

    Flex 和 AJAX 是两种在Web开发领域中用于创建交互式用户界面的技术。它们分别代表了不同的设计哲学和开发方法,旨在提升用户体验和应用性能。 Flex,最初由Macromedia(后被Adobe收购)发布,是一种应用服务器,于...

    jquery 快速学(4.Ajax应用)

    这两个方法是最常用的Ajax请求方式。`.get()`用于GET请求,`.post()`用于POST请求。它们都可以接收URL、数据和回调函数作为参数,简化了`.ajax()`的使用。 2. **$.load()** 此方法专门用于加载远程HTML片段并插入...

    Telerik RadControls for ASP.NET AJAX Q1 2010 SP1 dll(2010年3月29日的版本)

    4. **Readme.htm和read_me.txt**: 这两个文件通常包含关于软件的安装说明、更新内容、已知问题以及解决方法等重要信息。对于开发者来说,这些文件是理解新版本变化的关键。 5. **EditorDialogs**: 这可能是指...

    Telerik RadControls for ASP.NET AJAX Q1 2009 SP1 (2009年4月2日的版本) dll 2.0&3.5

    在提供的压缩包文件中,"Bin35"和"Bin"可能是两个不同的目标框架版本的库文件夹,分别对应.NET Framework 3.5和可能的2.0版本。这些文件通常包含了.dll文件,它们是Telerik RadControls的实现代码,可供开发者在项目...

    Telerik RadControls for ASP.NET AJAX Q3 2009 SP1 dll(2009年12月8日的版本)

    - **Bin35** 和 **Bin**:这两个目录可能分别存放不同版本的编译后的DLL文件,Bin35可能代表.NET Framework 3.5下的库,而Bin可能是其他版本或通用的库。 - **Skins**:皮肤文件夹包含各种外观主题,允许开发者轻松...

    java试用期工作总结.doc

    伴随着充实紧凑的工作生活,两个月的时间已经过去了。这一段时间里有工作上的收获,知识的丰富,经历的增长,同时也暴露出很多问题和缺乏。总结经历,吸取教训,本文将主要从几个方面来对工作进展总结:工作的主要...

    动漫公司实习总结.doc

    三个月的实习生涯,培养了我作为一个优秀企业员工所必备的素质和修养:严格遵守公司的各项规章制度,保时保质保量地完成公司分配的任务,如何高效地团体开发一个工程,公司内部人员如何有效地沟通交流,学会如何高效...

    JAVA程序员试用期转正工作总结.doc

    - 已经完成了两个月的试用期,程序员向公司申请转为正式员工。 - 在公司中他得到了成长,技术能力得到提升,同时也适应了公司文化和业务流程。 总结来看,这位JAVA程序员在试用期内展现出了积极的学习态度和良好...

    sqlserver,Asp.net,Jquery小总结

    在IT领域,数据库管理和前端开发是至关重要的两个部分。本文将深入探讨SQL Server数据库管理、ASP.NET Web应用程序开发以及jQuery库在前端交互中的应用。这些技术的熟练掌握能帮助开发者构建高效、用户友好的Web系统...

    基于Ajaxupload的多文件上传操作

    在这个例子中,有两个文件上传组件(`thumb_1` 和 `thumb_2`),用户可以选择文件并立即看到上传进度和结果。每个组件都有一个图片预览区域和一个文本输入框,用于存储文件的服务器路径。当文件上传成功后,图片预览...

    jQuery 生日select

    6. 最后,将这两个下拉菜单添加到页面上,并绑定事件监听器,以便在用户选择日期时更新其他相关元素,如年龄或星座。 此外,为了提高用户体验,我们还可以添加一些额外的功能,例如自动填充当前日期作为默认值,...

    php 面试题总结.docx

    2. **jQuery AJAX**: jQuery 提供了一个简化的 AJAX 接口,可以方便地发送异步请求。 3. **getJSON 方法**: 专门用于从服务器加载 JSON 格式的数据。 #### 十三、获取域名 **题目**: 获取域名的函数。 **解答**: -...

    servlet学习的总结资料

    2. **doGet()和doPost()方法**:这两个方法是HttpServlet类中的,分别处理HTTP GET和POST请求。在这些方法中,开发者通常会编写业务逻辑代码,以处理来自客户端的请求。 Servlet的生命周期包括以下四个阶段: 1. *...

    EASYUI CRU

    在这个案例中,我们将看到如何在2012年的两个不同日期(9月1日和8月31日)的 MVC 项目中实现基于 EasyUI 的 CRUD 功能。 1. 创建(Create):在 EasyUI 中,可以通过对话框(dialog)组件来创建新记录。首先,创建...

    j2ee xiangtao iteer

    这两个项目展示了相涛在实际开发中的应用能力和技术深度,特别是在J2EE框架集成和系统设计上的实践经验。 总结来说,相涛是一名富有潜力的J2EE开发者,他对技术的热情、自学能力以及对J2EE的深入理解,使他在软件...

Global site tag (gtag.js) - Google Analytics