Ajax小贴士(缓存问题,编码问题)

本文分享了使用AJAX过程中的实用技巧,包括选择合适的JavaScript库、解决编码问题、处理IE下的缓存及响应XML等,帮助开发者提高开发效率。

使用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比较类似,但是用过之后才知道什么叫简单轻巧和短小精悍。

编码问题

通过xml(标准化越来越近了)HttpRequest获取的数据,默认的字符编码是UTF-8,如果前端页面是GB2312或者其它编码,显示获取的数据就是乱码。通过xml(标准化越来越近了)HTTPRequest,POST的数据也是UTF-8编码,如果后台是GB2312或者其他编码也会出现乱码。解决方法:

  1. 统一到UTF-8。这也是国际化的必然趋势。
  2. 输出通过xml(标准化越来越近了)HttpRequest获取的文本文本时,在headers中增加文本声明(直接HTML声明没有作用)。如:
    PHP:header('Content-Type:text/html;charset=GB2312');
    ASP:Response.Charset = "GB2312"
    jsp(SUN企业级应用的首选):response.setHeader("Charset","GB2312");
  3. WWW服务器上强制声明。比如:apache(Unix平台最流行的WEB服务器平台)下的配置:
    AddDefaultCharset GB2312

    这种情况主要是应对通过xml(标准化越来越近了)HttpRequest访问的文件是静态文件,无法声明headers的情况下。
    静态页面一般都会经过apache(Unix平台最流行的WEB服务器平台)的deflate或gzip压缩,此时在上面情况下IE中,首次通过xml(标准化越来越近了)httpRequest获得的数据可以正常显示,但再获取数据显示时出现乱码,这次因为再次获取的数据来自缓存,可能由于浏览器解压缩的问题导致apache(Unix平台最流行的WEB服务器平台)设置的默认编码声明丢失。由于这种情况下一般是纯文本,可能还无法禁止缓存,可以设置xml(标准化越来越近了)httpRequest访问的文本文件不压缩来解决这个问题。
  4. 非UTF-8页面通过xml(标准化越来越近了)HttpRequest获取的文本文本输出前字符转码成unicode,或者编码直接是UTF-8,可以正常显示。如实例所示。

IE下的缓存问题

由于IE的缓存处理机制问题,每次通过xml(标准化越来越近了)HttpRequest访问动态页面返回的总是首次访问的内容,解决方法有:

  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(SUN企业级应用的首选)
    response.addHeader("Cache-Control", "no-cache");
    response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");
  3. 在xml(标准化越来越近了)HttpRequest发送请求之前加上:
    xml(标准化越来越近了)HttpRequest.setRequestHeader("If-Modified-Since","0");
    xml(标准化越来越近了)HttpRequest.send(null);

IE下的reponsexml(标准化越来越近了)问题

使用responsexml(标准化越来越近了)时,IE下只能接受.xml(标准化越来越近了)为后缀的xml(标准化越来越近了)文件,如果不能以.xml(标准化越来越近了)文件为结尾的,则需要如下处理:

  1. 在服务器端声明是xml(标准化越来越近了)文件类型。如:
    PHP:header("Content-Type:text/xml(标准化越来越近了);charset=utf-8");
    ASP:Response.ContentType = "text/xml(标准化越来越近了)";
    jsp(SUN企业级应用的首选):response.setHeader("ContentType","text/xml(标准化越来越近了)");
  2. 利用responseText获取,然后封装成xml(标准化越来越近了)
  3. 在ajax(动态网站静态化)应用上,JSON和JsonML是xml(标准化越来越近了)非常好的替代品。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值