幫倒忙的IE8 JSON.stringify()
2012-05-11 11:04
141 查看
幫倒忙的IE8 JSON.stringify() - 黑暗執行緒
幫倒忙的IE8 JSON.stringify()
正在趕工寫程式,沒想到又跟Bug耗上了大半天… (好像每次都這樣)
有段程式用了JSON2.js處理資料欄位的編修,原本執行良好,今天測試卻發現如果<input type='text'>的value是空字串,傳回結果會變成null四個字。
原本以為這是JSON2.js將空字串視為null所致(以前怎麼沒發現?),但如果是null,應該也要表示為{ "n”:null }而不是{"n”:”null”},幾過一番折騰,總算抓出這隻臭蟲來。
首先,我發現一件事實,因為IE8內建了JSON.stringify,JSON2.js裡找到這段"禮讓"的Code...
if (typeof JSON.stringify !== 'function') {
JSON.stringify = function (value, replacer, space) {
原來換了IE8後,JSON2.js就已經悄悄隱退,這陣子根本都是IE8的內建JSON在陪公子測試。而這解釋了為什麼以前用IE7, FF, Chrome測試都OK,改用IE8之後的今天才發生問題。
換句話說,這個簍子是IE8捅的,與JSON2.js完全無關。而我寫了簡單的var obj = { n:”” }; alert(JSON.stringify(obj));在IE8下測試,結果倒完全正常。再花了近半小時,總算釐清問題,寫出可以重製問題的簡短Code: (可放入Mini jQuery Lab直接測試)
排版顯示純文字
$("<input type='text' id='txtEmpty' value='' />").appendTo("body");
var obj = { n:$("#txtEmpty")[0].value };
alert(typeof obj.n + "->" + obj.n);
alert(JSON.stringify(obj));
明明typeof obj.n回應是string,測試obj.n == null也是false,但JSON.stringify(obj)就是會變成{"n":"null"}...
一邊幹譙一邊寫了Bug單(微軟至少提供了公開的問題回報UI,火氣是有消了一些),然後用var obj = { n:$("#txtEmpty")[0].value + "" };避開問題,繼續趕工去~~~
歡迎推文分享:
Published
16 May 2009 11:58 AM
由
Jeffrey
Filed under: Javascript, IE
意見
#
Phoenix
said on
17 May, 2009 08:12 PM
用$("#txtEmpty").val()結果好像也是正常的。
#
serafin
said on
21 February, 2011 09:16 PM
哈,这个bug值得一试!
#
suhern
said on
22 March, 2011 02:42 AM
幫了我一個忙感謝~~
其實2者最大的差別是~
IE8 的JSON.stringify() 會把中文字改成 \uxxxx
但 json2.js 的 JSON.stringify() 會保持中文
正在趕工寫程式,沒想到又跟Bug耗上了大半天… (好像每次都這樣)
有段程式用了JSON2.js處理資料欄位的編修,原本執行良好,今天測試卻發現如果<input type='text'>的value是空字串,傳回結果會變成null四個字。
原本以為這是JSON2.js將空字串視為null所致(以前怎麼沒發現?),但如果是null,應該也要表示為{ "n”:null }而不是{"n”:”null”},幾過一番折騰,總算抓出這隻臭蟲來。
首先,我發現一件事實,因為IE8內建了JSON.stringify,JSON2.js裡找到這段"禮讓"的Code...
if (typeof JSON.stringify !== 'function') {
JSON.stringify = function (value, replacer, space) {
原來換了IE8後,JSON2.js就已經悄悄隱退,這陣子根本都是IE8的內建JSON在陪公子測試。而這解釋了為什麼以前用IE7, FF, Chrome測試都OK,改用IE8之後的今天才發生問題。
換句話說,這個簍子是IE8捅的,與JSON2.js完全無關。而我寫了簡單的var obj = { n:”” }; alert(JSON.stringify(obj));在IE8下測試,結果倒完全正常。再花了近半小時,總算釐清問題,寫出可以重製問題的簡短Code: (可放入Mini jQuery Lab直接測試)
排版顯示純文字
$("<input type='text' id='txtEmpty' value='' />").appendTo("body");
var obj = { n:$("#txtEmpty")[0].value };
alert(typeof obj.n + "->" + obj.n);
alert(JSON.stringify(obj));
明明typeof obj.n回應是string,測試obj.n == null也是false,但JSON.stringify(obj)就是會變成{"n":"null"}...
一邊幹譙一邊寫了Bug單(微軟至少提供了公開的問題回報UI,火氣是有消了一些),然後用var obj = { n:$("#txtEmpty")[0].value + "" };避開問題,繼續趕工去~~~
歡迎推文分享:
Published
16 May 2009 11:58 AM
由
Jeffrey
Filed under: Javascript, IE
意見
#
Phoenix
said on
17 May, 2009 08:12 PM
用$("#txtEmpty").val()結果好像也是正常的。
#
serafin
said on
21 February, 2011 09:16 PM
哈,这个bug值得一试!
#
suhern
said on
22 March, 2011 02:42 AM
幫了我一個忙感謝~~
其實2者最大的差別是~
IE8 的JSON.stringify() 會把中文字改成 \uxxxx
但 json2.js 的 JSON.stringify() 會保持中文
相关文章推荐
- 幫倒忙的IE8 JSON.stringify()
- 在IE8下使用JSON.stringify()出现中文乱码的问题
- JSON.parse()与JSON.stringify() (浏览器兼容性:IE8以上、Chrome、Firefox3.5、Opera10.5、Safari4.0)
- JSON2的JSON.stringify在IE8上的BUG
- 解决IE8 内置JSON.stringify,中文变unicode的问题
- 解决IE8 内置JSON.stringify,中文变unicode的问题
- 解决IE8 内置JSON.stringify,中文变unicode的问题
- 解决IE8 内置JSON.stringify,中文变unicode的问题
- 浅谈 JSON.stringify 方法
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()以及stringify()字符串格式化
- 浅谈JSON中stringify 函数、toJosn函数和parse函数
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()的区别
- 商品SKU属性添加、上传图片、生成列表并生成json传给后台(支持IE8、谷歌、火狐等主流浏览器)
- JSON.parse()和JSON.stringify()
- JSON.parse() 和 JSON.stringify()使用