您的位置:首页 > 理论基础 > 计算机网络

开发自动完成功能中遇到的几个问题---javascript+XMLHTTP+DOM

2008-01-16 14:56 537 查看
近期仿照GOOGLE给自己维护的邮箱系统中添加地址栏的自动完成功能,开发是采用javascript+XMLHTTP+DOM来实现,在开发过程中发现了几个需要要注意到问题,在此记录下来:

[b]1. 首先关于XMLHTTP对象的创建的问题[/b]
浏览器到不同决定了XMLHTTP对象的创建方式不同,不过目前流行的浏览器无外乎IE6,IE7,FIREFOX以及其他基于IE内核的浏览器,根据自己在不同浏览器器中的实验,并参考了网上的N多方法,使用了一个比较通用的创建方法,基本上在目前的浏览器中都可正常创建XMLHTTP对象:
 try
 {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP") ;
 }
 catch(e)
 {
  try
  {
   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP") ;
  } catch(oc)
  {
   xmlHttp=null ;
  }
 }
 if ( !xmlHttp && typeof XMLHttpRequest != "undefined" )
 {
  xmlHttp=new XMLHttpRequest() ;//此处一般适用于IE7或者FIREFOX,IE7虽然支持XMLHTTP activex,但是需要修改安全限制,不如直接使用XMLHttpRequest对象。
 }  

2. 引用URL的问题
使用XMLHTTP对象GET或POST一个URL时,由于浏览器到安全限制,该URL必须与使用该对象脚本的网页在同一域内才行(域名相同即可,忽略端口跟路径);firefox的限制要更严格一些,不仅仅域名相同,还要求端口号、路径都相同。

[b]3. XMLHTTP获取的响应内容中中文的处理问题[/b]
对于FIREFOX这类浏览器,可以通过 .overrideMimeType("text/html; charset=gb2312") 的设置从responseText中获得正确的中文编码内容,这个方法不适用于通过ActiveXObject来创建的XMLHTTP对象。通过ActiveXObject创建的对象需要通过VBS写的一个转换函数把responseBody转换成中文编码内容,函数如下:
function gb2utf8(data)
{
 var glbEncode = [];
 gb2utf8_data = data;
 execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
 var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
 t=t.split("@");
 var i=0,j=t.length,k;
 while(++i<j)
 {
  k=t[i].substring(0,4);
  if(!glbEncode[k])
  {
   gb2utf8_char = eval("0x"+k);
   ExecScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
   glbEncode[k]=escape(gb2utf8_char).substring(1,6);
  }
  t[i]=glbEncode[k]+t[i].substring(4);
 }
 gb2utf8_data = gb2utf8_char = null;
 return unescape(t.join("%"));
}

[b]4.获得页面内控件的位置信息的函数
[/b]function getoffset(e)

 var t=e.offsetTop; 
 var l=e.offsetLeft; 
 while(e=e.offsetParent)
  { 
    t+=e.offsetTop; 
    l+=e.offsetLeft; 
  } 
  var rec = new Array(1);
  rec[0]  = t;
  rec[1] = l;
  return rec;
}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐