天天看點

一次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,并且往系統資料庫中寫入上面的那個項,

進而導緻了和我們的腳本代碼沖突使頁面報錯。

繼續閱讀