【问题标题】:Cannot acces object from javascript无法从 javascript 访问对象
【发布时间】:2021-02-08 14:22:04
【问题描述】:

在我的 ASP.NET MVC 应用程序的 ..\Views\Shared_Layout.cshtml 中,我有以下代码行:

> <script type="text/javascript" src="http://mycontrols.com/Scripts/MyConstants.js"></script>

文件 MyConstants.js 包含以下内容:

var MyConstants = function() {
   return {
       DataObject1: {
          MyEnum1: {
             Item0: 0,
             Item1: 1,
             Item3: 2
          }
       },
       DataObject2: {
          MyEnum2: {
             Item0: 0,
             Item1: 1,
             Item3: 2
          }
       }
   };
};

现在,从我的角度来看 (Index.cshtml),我正在尝试用 javascript 访问 MyEnum1 中的项目:

var myEnum = MyConstants.DataObject1.MyEnum1.Item1;

但它不起作用,在 chrome 中的错误 en devtools 下方:

jQuery.Deferred 异常:无法读取未定义的属性“MyEnum1” TypeError:无法读取未定义的属性“MyEnum1”

【问题讨论】:

  • jQuery.Deferred exception 在属性不存在的情况下,当您的代码位于 jquery 回调(例如 doc.ready)中时会发生。如果您根据 Rory 的回答正确使用()(或未正确使用),那么您的代码可能在您的var 设置正确之前运行(例如,您的&lt;script src=myconstants.js 不起作用。添加alert 作为包含脚本中的第一行以确保其正常工作。

标签: javascript jquery asp.net-mvc asp.net-4.5


【解决方案1】:

MyConstants是一个返回对象的函数,所以你需要调用它:

var myEnum = MyConstants().DataObject1.MyEnum1.Item1; 

如果您希望保留当前语法来检索值,则需要将 MyConstants 转换为对象:

var MyConstants = {
  DataObject1: {
    MyEnum1: {
      Item0: 0,
      Item1: 1,
      Item3: 2
    }
  },
  DataObject2: {
    MyEnum2: {
      Item0: 0,
      Item1: 1,
      Item3: 2
    }
  }
};

【讨论】:

  • 我已更改为 MyConstants() 而不是使用 MyConstants,但它不起作用。从 chrome 中的 devtools 我检查了这一行,即使我输入 javascript,chrome 也会得到 MyConstants.DataObject1.MyEnum1.Item1 MyConstants().DataObject1.MyEnum1.Item1
  • 在这种情况下,我们需要有关错误的更多信息,以及在页面中包含脚本的方式和时间,如上例所示。
  • 我终于解决了,没有正确应用更改。清除 chrome 缓存和历史记录后,它可以工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多