You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE11中JSON对象处理异常:是否因停止维护导致?

问题分析与解决方案

你遇到的IE11下JSON解析异常,核心并非IE11完全无法处理JSON对象,而是代码里的几个兼容性问题叠加导致的,我来帮你拆解和解决:

问题根源

  1. 非标准JSON解析方法evalJSON()
    evalJSON()是Prototype.js这类第三方库的非标准方法,并非浏览器原生API。IE11对这类方法的兼容性支持不佳,很可能在解析时没有正确将JSON字符串转为JS对象,反而把原始字符串当成可遍历对象,导致输出时字符被逐个拆分。

  2. for...in遍历的风险

    • 用for...in遍历数组会包含原型链上的可枚举属性,IE11中这种行为更明显,可能遍历到非数组元素的项,引发异常处理。
    • document.querySelectorAll()返回的NodeList在IE11里不是数组,用for...in遍历会拿到length等属性,导致处理非DOM元素时出错。
  3. 补充说明:IE11虽然停止开发,但它原生支持JSON.parse(),并非完全无法处理JSON对象,只是代码写法没适配它的特性。

修复方案

改成适配IE11的标准写法,核心是替换非标准API、改用安全的遍历方式:

// 先用原生JSON.parse解析响应数组(IE11支持原生JSON)
var parsedArray = JSON.parse(responseArray);

// 用forEach遍历数组(IE11支持Array.prototype.forEach)
parsedArray.forEach(function(item) {
    // 处理日期格式
    if (item.field_number === '5') {
        item.value = intlToUsDate(item.value);
        console.log(item.value);
    }

    var inputSelector = '[name="input_' + item.field_number + '"]';
    var dom_elms = document.querySelectorAll(inputSelector);

    // 用普通for循环遍历NodeList,避免for...in的问题
    for (var i = 0; i < dom_elms.length; i++) {
        var dom_elm = dom_elms[i];
        if (dom_elm.type === 'radio' || dom_elm.type === 'checkbox') {
            if (dom_elm.value === item.value && !dom_elm.checked) {
                dom_elm.click();
                continue;
            }
        } else {
            dom_elm.value = item.value;
        }
    }
});

额外注意点

  • 确保intlToUsDate函数在IE11中能正常工作,IE11对Intl对象的支持有限,如果该函数依赖现代IntlAPI,需要做兼容处理。
  • 若responseArray已经是解析后的数组(而非字符串),可去掉JSON.parse()步骤,但仍需替换for...in为forEach或普通for循环。

内容的提问来源于stack exchange,提问作者Kevin Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:50