2014/05/28

怪,IE8顯示的資料少了

今天遇到一件怪事,面對同樣的資料來源,IE8的呈現出來的資料筆數竟然與IE11, Firefox, Chrome不同

環境
這是個web-based的系統,browser以AJAX,透過XMLHttpRequest向server取得資料後,再以JavaScript呈現在頁面

問題
以現有的設定應該會顯示出3筆資料,在Firefox, Chrome與IE11都正確顯示,唯有IE8只顯示出一筆資料。

解決過程
用Chrome的development tool來看,responseText拿到的資料是
192.168.10.120/1/1##192.168.10.57/2/1##192.168.10.63/1/5
(我們是用"##"來做分隔號)
但在IE8中,responseText卻是
192.168.10.120/1/1## 
所以,問題就不是在javascript把資料呈現在頁面這段,而是資料來源了。而這就有點詭異了,因為在同一個時間點,這設定是不會變動的,IE8理應拿到的是跟其他browser相同的資料才對。難道IE8有問題?
直接用IE8連結資料源的網址,咦~~,拿到的資料是3筆呀。所以IE8從server拿的資料應該是正確的。那問題是在IE8的XMLHttpRequest把我的資料暗槓了嗎?應該不會才對,其他相同作法的頁面都沒事呀。

在百思不得其解時,突然想起用Wireshark來抓抓兩端間的封包看看,果然有了重大發現。server傳回來的responseText在Wireshark看到的是
192.168.10.120/1/1##\000192.168.10.57/2/1##\000192.168.10.63/1/5

在每個## (分隔號)的後面,都多了\000,也許就是因為這個,IE8的javascript engine解譯為octal null character,對null-terminated string來說,這就是字串的結束,所以把後面的都忽略了;而其他browser的javascript engine則是忽略掉這個null character,所以才有這樣的差別。

看來問題是在server-side的程式了。
查找了一下server程式,果然發現該程式(C language)在把分隔號##寫入response chunk,給的length竟然是3,難怪會多出那個null character。改正後就沒問題了。

結案!

沒有留言: