2016-03-09 28 views
1

我想在可比性模式下在IE8中加載JavaScript的JSON特性。如何在Javascript中爲IE8加載JSON特性?

我是advised使用douglascrockford/JSON-js獲取JSON加載到過時的瀏覽器。

這是我所做的。我在我的資源文件夾中添加了一個新文件,並將其命名爲json2.js然後從JSON-js項目複製json2.js文件內容並將其粘貼到我的json2.js文件中,並將文件resources/json2.js包含到我的應用程序中。

現在,我試圖用JSON.stringify轉換對象爲JSON字符串,它是給我下面的錯誤

但是當我在IE8中使用JSON.stringify(records)下兼容模式我得到這個錯誤

Line: 314 
Char: 21 
Error: Invalid procedure call or argument 
Code: 0 

這裏是我做了什麼

HTML標記

<div id="d">Click Here</div> 
<div id="s"></div> 

Javascript代碼

var records = {}; 


$(function(e){ 

    records['123'] = {}; 
    records['456'] = {}; 

    records['123']['rec_id'] = 4456; 
    records['123']['created_at'] = ''; 
    records['123']['assigned_at'] = ''; 
    records['123']['sys_id'] = 1745; 

    records['456']['rec_id'] = 4456; 
    records['456']['created_at'] = ''; 
    records['456']['assigned_at'] = ''; 
    records['456']['sys_id'] = 1745; 


    $.each(records, function(callID, record){ 

      record['campaign_id'] = '1'; 
      record['offset'] = 123; 
      record['attempt'] = '7'; 
      record['phone'] = '800-123-4567'; 
      record['identity'] = 123; 
      record['code'] = 'Some Code'; 
      record['notes'] = 'Some notes'; 
      record['completed_by'] = 'Mike A'; 
      record['name'] = null; 

      record['completed_at'] = ""; 

    }); 


    $('#d').click(function(e){ 
     $('#s').text( JSON.stringify(records) ); 
    }); 

}); 

上面的代碼中可以找到以下jFiddle https://jsfiddle.net/4632wf5n/

我能做些什麼,我的對象轉換成JSON字符串在IE8與可比性模式?

+0

鑑於你使用jQuery,爲什麼不使用它的JSON方法,而不是包括json2.js呢? – nnnnnn

+1

如何使用jQuery轉換對象而不使用'JSON.stringify()'?我不認爲有這樣的事情http://stackoverflow.com/questions/3904269/convert-object-to-json-string –

+0

對不起,我以爲jQuery有一個等效的方法,但它看起來像我錯了。 JQuery *確實有一個$ .parseJSON()方法,但顯然這與你正在做的事情相反。 – nnnnnn

回答

0

雖然根據Mozilla Developer Network (MDN)JSON.stringifyIE8支持的情況下,如果它不是,那麼你可以使用填充工具(即,如果它不是由瀏覽器的支持,然後使用自定義實現)。如果道格拉斯JSON.js不工作,MDN也提供了一個代碼填充,我已經在這裏複製。只需在任何其他腳本之前插入它,JSON.stringify就可以在不受支持的IE6 +瀏覽器中使用。

if (!window.JSON) { 
    window.JSON = { 
    parse: function(sJSON) { return eval('(' + sJSON + ')'); }, 
    stringify: (function() { 
     var toString = Object.prototype.toString; 
     var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; }; 
     var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'}; 
     var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); }; 
     var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g; 
     return function stringify(value) { 
     if (value == null) { 
      return 'null'; 
     } else if (typeof value === 'number') { 
      return isFinite(value) ? value.toString() : 'null'; 
     } else if (typeof value === 'boolean') { 
      return value.toString(); 
     } else if (typeof value === 'object') { 
      if (typeof value.toJSON === 'function') { 
      return stringify(value.toJSON()); 
      } else if (isArray(value)) { 
      var res = '['; 
      for (var i = 0; i < value.length; i++) 
       res += (i ? ', ' : '') + stringify(value[i]); 
      return res + ']'; 
      } else if (toString.call(value) === '[object Object]') { 
      var tmp = []; 
      for (var k in value) { 
       if (value.hasOwnProperty(k)) 
       tmp.push(stringify(k) + ': ' + stringify(value[k])); 
      } 
      return '{' + tmp.join(', ') + '}'; 
      } 
     } 
     return '"' + value.toString().replace(escRE, escFunc) + '"'; 
     }; 
    })() 
    }; 
}