一次Ajax报错:“存储空间不足,无法完成此操作”的解决经验

连续几天我们收到几位客户的问题工单,问题描述都类似,都是在做登陆或者交易时报脚本错误,交易无法正常执行。

我们“远程协助”客户机器时,调试发现都是ajax代码出错,错误如下:

网页错误详细信息

 

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)

时间戳: Fri, 1 Aug 2014 08:05:43 UTC

 

 

消息: 存储空间不足,无法完成此操作。

 

行: 772

字符: 8

代码: 0

URI: https://xxx.xxxxx.com/yyy/script.do

 

网页错误详细信息

 

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)

时间戳: Fri, 1 Aug 2014 08:11:44 UTC

 

 

消息: 数组长度必须赋值为有限正数

行: 722

字符: 3

代码: 0

URI: https://xxx.xxxxx.com/yyy/script.do


网络上查了一下相关的资料,按说明调整了IE选项,把ie6升级到ie8,安装其他的浏览器,检查了相关的注册表项等等,

但是这些都没有解决这个问题。

后面我们联系了一家客户,去客户公司现场调试并详细了解了相关问题和情况,

最后采集了机器数据回去后做详细分析发现了注册表中有个可疑的条目:

HKEY_CLASSES_ROOT\CLSID\{ED8C108E-4349-11D2-91A4-00C04F7969E8}\InProcServer32

%SystemRoot%\System32\msxml3.dll

我们怀疑这个和我们的ajax方法有冲突;我们原来的js代码中有一段:

Window.ActiveXObject?newActiveXObject(“Microsoft.XMLHTTP”):new XMLHttpRequest();


(比较老的代码了,有段历史了,公司早期做的封装,后面一直没更新)

对比就发现了客户机器上的msxml3.dll比我们代码中使用的Microsoft.XMLHTTP版本更新,

后来我们为了兼容这个版本问题修改了代码,新代码如下:


function createXmlRequest(){
if(window.ActiveXObject && !window.XMLHttpRequest){
//IE浏览器
var msxmls = ['MSXML2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','MSXML2.XMLHTTP.2.6','Msxml2.XMLHTTP','Microsoft.XMLHTTP'];
for (var i = 0; i < msxmls.length; i++) {
try {
return new ActiveXObject(msxmls[i]);
} catch (e) {
}
}
}else if(window.XMLHttpRequest){
   //Mozilla、Opera 等非IE浏览器
return new XMLHttpRequest();
}else
{
return null;
} 
}



 后来总结发现,那批有问题的客户是因为都安装一款财务软件,该软件自带msxml3.dll,并且往注册表中写入上面的那个项,

从而导致了和我们的脚本代码冲突使页面报错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值