前往顾页
以后地位: 主页 > 收集编程 > Ajax实例教程 >

Ajax缓存问题,编码问题终究处理计划

时候:2015-02-12 21:05来源:知行网www.zhixing123.cn 编辑:麦田守望者

利用ajax(静态网站静态化)过程中,偶然候总会碰到一些困难,浏览器兼容、编码、IE下的特别措置等等,偶尔会搞的人头昏目炫哭笑不得,这里列一些小贴士,或许有些用。

 

利用Javascript库

ajax(静态网站静态化)的风行和巨年夜能力,让我们从头核阅了Javascript的开辟,也直接促使各种库的呈现。对浅显的开辟者,利用一些适合本身的Javascript库不但可以避免ajax(静态网站静态化)利用上的浏览器兼容等问题,也使其开辟更加的不变和高效。这里列一些我晓得的轻量级的Javascript库:

 

YUI:YAHOO出品,组件丰富强年夜结实不变,是团队合作开辟的首选。

JQuery:矫捷、高效,其基于CSS3 和XPath的挑选器语法引擎非常的强年夜和完整。

Prototype:是一个非常文雅的Javascript库,最典范的莫过于$标记了,DWR,JQuery都被它吸收了。在它根本上呈现了script.aculo.us。

Mootools:核心语法和Prototype比较近似,但是用过以后才晓得甚么叫简朴轻巧和短小精干。

 

编码问题

经由过程xml(标准化愈来愈近了)HttpRequest获得的数据,默许的字符编码是UTF-8,如果前端页面是GB2312或别的编码,显现获得的数据就是乱码。经由过程xml(标准化愈来愈近了)HTTPRequest,POST的数据也是UTF-8编码,如果背景是GB2312或其他编码也会呈现乱码。处理体例:

同一到UTF-8。这也是国际化的必定趋势。

输入经由过程xml(标准化愈来愈近了)HttpRequest获得的文本文本时,在headers中增加文本声明(直接HTML声明没有感化)。如: 

PHP:header('Content-Type:text/html;charset=GB2312');

ASP:Response.Charset = "GB2312"

jsp(SUN企业级利用的首选):response.setHeader("Charset","GB2312");

WWW办事器上强迫声明。比如:apache(Unix平台最风行的WEB办事器平台)下的建设:

AddDefaultCharset GB2312

这类环境主如果应对经由过程xml(标准化愈来愈近了)HttpRequest拜候的文件是静态文件,无法声明headers的环境下。

静态页面一般都会颠末apache(Unix平台最风行的WEB办事器平台)的deflate或gzip紧缩,此时在下面环境下IE中,初次经由过程xml(标准化愈来愈近了)httpRequest获得的数据可以一般显现,但再获得数据显现时呈现乱码,此次因为再次获得的数据来自缓存,可能因为浏览器解紧缩的问题导致apache(Unix平台最风行的WEB办事器平台)设置的默许编码声明丧失。因为这类环境下通常为纯文本,可能还无法避免缓存,可以设置xml(标准化愈来愈近了)httpRequest拜候的文本文件不紧缩来处理这个问题。

非UTF-8页面经由过程xml(标准化愈来愈近了)HttpRequest获得的文本文本输入前字符转码成unicode,或编码直接是UTF-8,可以一般显现。照实例所示。

 

IE下的缓存问题

因为IE的缓存措置机制问题,每次经由过程xml(标准化愈来愈近了)HttpRequest拜候静态页面前往的老是初次拜候的内容,处理体例有:

客户端经由过程增加随机字符串处理。如: 

var url = 'http://dancewithnet.com/';

url +=  '?temp=' + new Date().getTime();

url +=  '?temp=' + Math.random();

在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");

在xml(标准化愈来愈近了)HttpRequest发送请求之前加上: 

xml(标准化愈来愈近了)HttpRequest.setRequestHeader("If-Modified-Since","0");

xml(标准化愈来愈近了)HttpRequest.send(null);

 

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

利用responsexml(标准化愈来愈近了)时,IE下只能接管.xml(标准化愈来愈近了)为后缀的xml(标准化愈来愈近了)文件,如果不克不及以.xml(标准化愈来愈近了)文件为末端的,则需求以下措置:

在办事器端声明是xml(标准化愈来愈近了)文件范例。如:

PHP:header("Content-Type:text/xml(标准化愈来愈近了);charset=utf-8");

ASP:Response.ContentType = "text/xml(标准化愈来愈近了)";

jsp(SUN企业级利用的首选):response.setHeader("ContentType","text/xml(标准化愈来愈近了)");

操纵responseText获得,然后封装成xml(标准化愈来愈近了)。

在ajax(静态网站静态化)利用上,JSON和JsonML是xml(标准化愈来愈近了)非常好的替代品。

------分开线----------------------------
标签(Tag):Ajax缓存问题
------分开线----------------------------
保举内容
猜你感兴趣