zoukankan      html  css  js  c++  java
  • 幫倒忙的IE8 JSON.stringify()

    幫倒忙的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() 會保持中文


  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/lexus/p/2495605.html
Copyright © 2011-2022 走看看