慎用Msxml2.XMLHTTP!

xuzuning 2006-04-07 03:39:05
在ajax应用中,我们总是会用
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e2){
xmlhttp = false
}
}
这样的经典代码。
查开了很多ajax工具箱和集成环境,也都类似这样使用的

但是在windows 98、2000的初装环境中(不打补丁、不升级浏览器)
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
可以创建对象,但不能正常运行。并不象期望的那样去创建Microsoft.XMLHTTP对象

而在上述环境中用
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
创建的对象,不能对回传的responseText做编码转换处理,即使声明语言类型也不行
但能正确处理responseXML对象

可见ajax中的X的重要性!
发送数据你可以不用XML,但回传的数据还是XML为好


...全文
4981 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cds27 2006-05-08
  • 打赏
  • 举报
回复
“发送数据你可以不用XML,但回传的数据还是XML为好”,支持!

我一直都强调大家用XML类型来传递数据,虽然麻烦,但是却实用,而且其实还可以省去编码转换的问题。
Go_Rush 2006-05-08
  • 打赏
  • 举报
回复
想问一下,楼主现在创建 xmlhttp对象的时候是怎么处理的。


怎么避免 msxml2.xmlhttp问题出现
meizz 2006-05-08
  • 打赏
  • 举报
回复
if(window.ActiveXObject && !window.XMLHttpRequest)
{
window.XMLHttpRequest = function()
{
var msxmls=['MSXML3','MSXML2','Microsoft'], ex;
for(var i=0;i<msxmls.length;i++)
try{return new ActiveXObject(msxmls[i]+'.XMLHTTP')} catch(ex){}
throw new Error("No XML component installed!");
}
}

var xmlHttp = new XMLHttpRequest();
Scarroot 2006-04-18
  • 打赏
  • 举报
回复
mark
xxrl 2006-04-18
  • 打赏
  • 举报
回复
。。。
windbey 2006-04-17
  • 打赏
  • 举报
回复
eglic(圪圪) (理由永远是谎言,信仰永远是自慰) ( ) 信誉:109 2006-4-7 16:06:32 得分: 0



没碰到过,看看我的BT代码

/*****************************************************************************************
Object CreateHTTPPoster(void)
创建尽可能高版本的XMLHTTP对象
*****************************************************************************************/
function CreateHTTPPoster(){
if(window.XMLHttpRequest) return new XMLHttpRequest();
try{
return new ActiveXObject('MSXML2.XMLHTTP.4.0');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP.3.0');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP.2.6');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP');
}catch(e){try{
return new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){return null;}}}}}
}




这么写的是疯子,还是天才啊。亏他想的出来。
wopos 2006-04-17
  • 打赏
  • 举报
回复
up
GaoXX 2006-04-15
  • 打赏
  • 举报
回复
顶一下
jsidiot 2006-04-10
  • 打赏
  • 举报
回复
那下一步就是客户端怎么能够优化处理返回的xml呢?
如何提高效率
lovebanyi 2006-04-10
  • 打赏
  • 举报
回复
还要注意..释放内存

biennale 2006-04-10
  • 打赏
  • 举报
回复
收藏
hahawen 2006-04-09
  • 打赏
  • 举报
回复
顶一下,这个问题还真没注意。3ks

eglic的做法太乱,yahoo前段时间不是公开了他的javascript的ui的lib库了吗?建议大家都下载看看,里面有一个connection类,专门处理ajax的,而且加了类式线程的控制,虽然没有用过但是感觉相当不错。不过这个也是存在唠叨说的问题的。



iasky 2006-04-09
  • 打赏
  • 举报
回复
mark,现在正在学习ajax中
wtogether 2006-04-09
  • 打赏
  • 举报
回复
function CreateHTTP()
{
if (window.XMLHttpRequest) return(new XMLHttpRequest());
var arr_t = new Array
(
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP.2.6",
"Microsoft.XMLHTTP",
"MSXML.XMLHTTP"
);
for (var i=0; i<arr_t.length; i++)
{
try
{
return(new ActiveXObject(arr_t[i]));
}
catch(e)
{
}
}
return(null);
}
全息宇宙 2006-04-08
  • 打赏
  • 举报
回复
够bt
toddlee 2006-04-08
  • 打赏
  • 举报
回复
eglic那个强~
baby21st 2006-04-07
  • 打赏
  • 举报
回复
总是返回XML,在FF这样非IE下,解析起来是不是有点麻烦呢?
是是非非 2006-04-07
  • 打赏
  • 举报
回复
基本上都在 2.6这个版本以上的
嘿嘿~
fishbone31 2006-04-07
  • 打赏
  • 举报
回复
受教了,在版本和兼容性上总是有意料不到的东西
是是非非 2006-04-07
  • 打赏
  • 举报
回复
没碰到过,看看我的BT代码

/*****************************************************************************************
Object CreateHTTPPoster(void)
创建尽可能高版本的XMLHTTP对象
*****************************************************************************************/
function CreateHTTPPoster(){
if(window.XMLHttpRequest) return new XMLHttpRequest();
try{
return new ActiveXObject('MSXML2.XMLHTTP.4.0');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP.3.0');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP.2.6');
}catch(e){try{
return new ActiveXObject('MSXML2.XMLHTTP');
}catch(e){try{
return new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){return null;}}}}}
}
加载更多回复(1)

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧