【问题标题】:Bizarre Javascript JSON undefined error奇怪的 Javascript JSON 未定义错误
【发布时间】:2010-12-20 14:02:46
【问题描述】:

我遇到了一个我无法在任何地方找到任何提及的错误。我正在使用 ASP.NET 开发支持 AJAX 的 WCF Web 服务。在我的 ASP.NET 母版页的 中,我包含了 json.js 文件,该文件是从 json.org 复制的。当我运行该页面时,它在 json.js 中的第一行代码(在许多 cmets 之后)失败(VS 2008 捕获 Javascript 异常),即:

JSON = JSON || {};

错误提示 JSON 未定义:

Microsoft JScript 运行时错误:“JSON”未定义

嗯,呵呵!这就是为什么该行正在测试它是否已定义,如果已定义,请将其设置为空对象!它应该是未定义的,对吧?上次听说在 Javascript 中对未定义的变量执行这样的操作并不是错误。

谁能告诉我这里发生了什么?我怀疑是其他地方出了什么问题导致了这个问题。我对 Javascript 或 ASP.NET 没有丰富的经验,所以我可能在设置中遗漏了一些常见的问题。

【问题讨论】:

  • 你不应该使用 json2.js (json.org/json2.js) 吗?它不会遇到这个问题。

标签: asp.net javascript json undefined


【解决方案1】:

我会确保您的页面以 IE8 标准模式呈现;我发现如果文档在 Quirks 或 IE7 模式下呈现,this.JSON 是未定义的。

您可以通过在页面上包含以下元标记来强制 IE8 以 IE8 标准模式呈现:

<meta http-equiv="x-ua-compatible" content="IE=8" />

【讨论】:

    【解决方案2】:

    您应该使用json2.js。 违规行已更改:

    // Create a JSON object only if one does not already exist. We create the
    // methods in a closure to avoid creating global variables.
    
    if (!this.JSON) {
        this.JSON = {};
    }
    

    【讨论】:

    • 太棒了,成功了!谢谢。出于好奇,this 关键字在这样的全局上下文中有何作用?
    • this 是全局范围,即this === window。
    • Nate C-K,如果这解决了您的问题,请“接受”答案。如果您愿意,您可以稍后撤消该操作。它会给你积分,并且在你下次提问时也会有所帮助。
    【解决方案3】:

    如前所述,您应该使用 json2。

    然而,错误源于 MS 对全局变量的处理。试试 window.JSON = window.JSON || {};从那时起,JSON 应该可以正常工作了。

    【讨论】:

    • 不是 MS 的东西,只是 JavaScript 的东西。
    【解决方案4】:

    你可能不得不做var JSON = JSON || {}; 我在 IE8 中遇到过类似的 Javascript 问题。

    【讨论】:

    • 还有一点我忘了说,我们的系统管理员昨天刚刚将我们升级到 IE8。我想知道还有什么其他惊喜。
    【解决方案5】:

    我在尝试使用谷歌地图“街景”时遇到了同样的问题。街景窗口会完全变黑,我会在状态栏中看到指示错误的图标。我像 webdev007 一样禁用了 DivX,问题就解决了! Webdev,你是个天才!谢谢!

    【讨论】:

      【解决方案6】:

      我最近开始收到 JSON 未定义 JavaScript 错误,发现问题是由于最近在 IE 中添加了 DivX。 DivX 附加组件还会在包含所有 https 引用且没有 http 引用的网页上引起安全内容警告(我将显示混合内容设置为提示以在 Web 开发期间更正引用)。在我禁用 DivX 插件后,JSON 未定义的 JavaScript 错误消失了,并且弹出了错误的安全内容警告。

      【讨论】:

        【解决方案7】:

        我有同样的错误,我已经在使用 json2;

        对我来说,当我在表达式前添加var 时它会起作用:

        var JSON = JSON || {};
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 1970-01-01
          相关资源
          最近更新 更多