品牌网站建设

psd转xhtml/css 88元/页起

  • 符合W3C标准的XHTML/CSS编码
  • 多浏览器及操作平台支持
  • SEO(搜索引擎)语义代码标准
  • 经过优化的和切片图像
  • 结构良好的XHTML/CSS
  • 转换页面越多,折扣越多
更多优惠

手机13146413981qq393992480msnyibing98@hotmail.com

Ajax的小贴士

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

   3. 在XMLHttpRequest发送请求之前加上:

      XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
      XMLHttpRequest.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:response.setHeader("ContentType","text/xml");

   2. 利用responseText获取,然后封装成XML。
   3. 在AJAX应用上,JSON和JsonML是XML非常好的替代品。

Add comment


 

biuquote
  • Comment
  • Preview
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



订阅新易网博客

  • 订阅到抓虾
  • 哪吒提醒
  • pageflakes
  • Add to My Yahoo!
  • Add to Google
  • 鲜果阅读器订阅图标
  • 订阅到有道阅读
  • 用QQ邮箱阅读空间订阅我的博客。
专业设计 量身定制 品牌网站建设 体验价只需999元
.me 我要我的域名 新网域名 260元/年 再送空间100M
印彩色名片,每盒仅5元
免费推广您的网站或产品 互换广告位、友情连接、软文

Recent comments