当前位置: 首页 > 图文教程 > 网络编程 > AJAX技术 > Ajax的小贴士使用小结

AJAX技术
AJAX 用户注册时的应用实例
ajax readyState的五种状态详解
php AJAX POST的使用实例代码
Ajax 用户名验证是否存在
Ajax+PHP简单基础入门实例教程
AJAX 异步传输数据的问题
ASP AJAX 静态分页
js装载xml文件然后发向服务器的实现代码
完成了AJAX树附原理分析
AJAX 支持搜索引擎问题分析
ajax Suggest类似google的搜索提示效果
Ajax 框架学习笔记
用ajax xml的数据读取的HelloWorld程序
Ajax 表单验证 实现代码
Ajax request response 乱码解决方法
AJAX 随记
ajax 乱码的一种解决方法
ajax session过期问题的几个解决方案
四步学会 Ajax
Ajax异步(请求)提交类 支持跨域

AJAX技术 中的 Ajax的小贴士使用小结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 50 ::
收藏到网摘: n/a

在使用Ajax过程中,有时候总会遇到一些难题,浏览器兼容、编码、IE下的特殊处理等等,偶尔会搞的人头昏脑胀哭笑不得,这里列一些小贴士,或许有些用。
使用Javascript库
Ajax的流行和巨大威力,让我们重新审视了Javascript的开发,也直接促使各种库的出现。对于普通的开发者,使用一些适合自己的Javascript库不仅可以避免Ajax应用上的浏览器兼容等问题,也使其开发更加的稳定和高效。这里列一些我知晓的轻量级的Javascript库:
1 YUI:YAHOO出品,组件丰富强大健壮稳定,是团队协作开发的首选。
2 JQuery:灵活、高效,其基于CSS3 和XPath的选择器语法引擎非常的强大和完整。
3 Prototype:是一个非常优雅的Javascript库,最经典的莫过于$符号了,DWR,JQuery都被它吸引了。在它基础上出现了script.aculo.us。
4 Mootools:核心语法和Prototype比较类似,但是用过之后才知道什么叫简单轻巧和短小精悍。
编码问题
通过XMLHttpRequest获取的数据,默认的字符编码是UTF-8,如果前端页面是GB2312或者其它编码,显示获取的数据就是乱码。通过XMLHTTPRequest,POST的数据也是UTF-8编码,如果后台是GB2312或者其他编码也会出现乱码。解决方法:
1 统一到UTF-8。这也是国际化的必然趋势。
2 输出通过XMLHttpRequest获取的文本文本时,在headers中增加文本声明(直接HTML声明没有作用)。如:
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset = "GB2312"
JSP:response.setHeader("Charset","GB2312");
3 WWW服务器上强制声明。比如:apache下的配置:
AddDefaultCharset GB2312
这种情况主要是应对通过XMLHttpRequest访问的文件是静态文件,无法声明headers的情况下。
静态页面一般都会经过Apache的deflate或gzip压缩,此时在上面情况下IE中,首次通过XMLhttpRequest获得的数据可以正常显示,但再获取数据显示时出现乱码,这次因为再次获取的数据来自缓存,可能由于浏览器解压缩的问题导致Apache设置的默认编码声明丢失。由于这种情况下一般是纯文本,可能还无法禁止缓存,可以设置XMLhttpRequest访问的文本文件不压缩来解决这个问题。
4 非UTF-8页面通过XMLHttpRequest获取的文本文本输出前字符转码成unicode,或者编码直接是UTF-8,可以正常显示。如实例所示。
IE下的缓存问题
由于IE的缓存处理机制问题,每次通过XMLHttpRequest访问动态页面返回的总是首次访问的内容,解决方法有:
1 客户端通过添加随机字符串解决。如:
复制代码 代码如下:

var url = 'http://dancewithnet.com/';
url += '?temp=' + new Date().getTime();
url += '?temp=' + Math.random();

2 在HTTP headers禁止缓存。如:
HTTP:
复制代码 代码如下:

<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="expires" content="Thu, 01 Jan 1970 00:00:01 GMT" />
<meta http-equiv="expires" content="0" />

PHP:
复制代码 代码如下:

header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

ASP:
复制代码 代码如下:

Response.expires=0
Response.addHeader("pragma","no-cache")
Response.addHeader("Cache-Control","no-cache, must-revalidate")

JSP:
复制代码 代码如下:

response.addHeader("Cache-Control", "no-cache");
response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");

IE下的reponseXML问题
使用responseXML时,IE下只能接受.xml为后缀的XML文件,如果不能以.xml文件为结尾的,则需要如下处理:
1 在服务器端声明是xml文件类型。如:
PHP:header("Content-Type:text/xml;charset=utf-8");
ASP:Response.ContentType = "text/xml";
JSP:response.setHeader("ContentType","text/xml");
2 利用responseText获取,然后封装成XML。
3 在AJAX应用上,JSON和JsonML是XML非常好的替代品。 '