今天在寫代碼的時候,用到ajax異步獲取數據,在firefox 13.0下一切正常,而在各個版本的IE之下測試IE6正常,IE8卻會報錯 "Error: 由於出現錯誤 c00ce56e 而導致此項操作無法完成"。因為firefox是我寫代碼和做測試的浏覽器,所以一般都會首先保證在它下邊的正確性,firefox下一切看起來都那麼正常。
我的環境是:js代碼是基於jQuery的、使用了異步加載的方式加載各個js類庫、請求方式是'GET',返回格式'html';
由於之前的工作階段性的完成,所以准備在IE下看看是否正常,一看之下,有點郁悶,沒有反應..數據沒有顯示出來。然後在IE下,F13,發現IE下請求數據的過程沒有問題,而且在控制面板中也獲取到了數據,但是當我使用$('#id').html(data);往DOM中插入數據時,完全無反應。
繼續調試,然後我在$.ajax請求的error參數選項中,alert其傳遞給回調函數的errorThrown參數時,獲取到了如下錯誤:“由於出現錯誤 c00ce56e 而導致此項操作無法完成。”,這個很關鍵,因為彈出的錯誤是有代碼的,所以這是一個有跡可循的錯誤。
這裡順便說一句,在firefox下ajax請求是返回success的,而IE下是返回error的。根據這個錯誤提示,在網上搜索了相關的答案,找到比較有用的說法是編碼不一致。經過查找發現,原來我html頁面的編碼是utf-8,而在我php程序中設置的也是 header('Content-type: text/html;charset=utf-8'); 這都郁悶了,一樣的都沒有問題啊,後來查看頁面源代碼的時候發現怎麼是utf8呢,少了一個'-'這個'-'跑哪去了,後來才發現原來nginx配置中設置了charset utf8;強制字符編碼為utf8了, 趕緊加上重啟nginx一切正常。。。
根據這個問題可以總結如下經驗:
firefox的容錯能力比IE更強,以HTML5的設計思想來說,firefox表現得更好,對於這樣的容錯能力,是否會造成安全隱患,由於未經過測試,所以暫時不知;
盡量保持程序的各種編碼的一致性,否則可能會出現不可預知的錯誤,推薦使用utf-8;