【问题标题】:0x800a1391 - JavaScript runtime error: 'jQuery' is undefined0x800a1391 - JavaScript 运行时错误:“jQuery”未定义
【发布时间】:2013-04-03 15:31:39
【问题描述】:

我有一个 ASP .Net MVC4 Web 应用程序。在其中我有我常用的 _Layout.cshtml html,它依次加载默认的 Home/Index。一切正常。

在我的索引中,我还加载了部分视图。这也很好用。没有问题。

我正在使用来自以下站点的 UI 工具:

http://www.keenthemes.com/preview/index.php?theme=metronic

问题在于它似乎主要是 HTML4 并且不是为开箱即用的 MVC 而设计的,所以我不得不稍微调整它以使其按我想要的方式工作。 (除了任何非常基本的东西之外没有什么)。例如,将一部分移出索引并使用 Renderbody() 加载它,因此实际的 html 结构永远不会改变。我已经这样做了一百万次,以确保我没有遗漏任何结束标签或任何其他可能导致我的问题的东西。

到目前为止,完全没有问题。一切都按原样加载。

我继续创建第二个视图及其部分以提取站点的其他部分。像往常一样,婴儿先一步。在提取任何其他代码之前,我只是在第一页中使用了一点“Hello World”,并在部分中使用了一个类似的字符串以确保它正常工作。是的。

现在,当我输入 url Home/ActionName 时,整个事情会按原样重新加载,但看起来很糟糕。我收到此错误消息:

0x800a1391 - JavaScript 运行时错误:'jQuery' 未定义

下面是我明确定义的代码:

<!-- BEGIN CORE PLUGINS -->
<script src="assets/plugins/jquery-1.8.3.min.js" type="text/javascript"></script>
<script>
    jQuery(document).ready(function ()
    {
        App.init(); // initlayout and core plugins
        _Layout.init();
        _Layout.initJQVMAP(); // init index page's custom scripts
        _Layout.initCalendar(); // init index page's custom scripts
        _Layout.initCharts(); // init index page's custom scripts
        _Layout.initChat();
        _Layout.initDashboardDaterange(); //Red date range
        _Layout.initIntro(); //Pop up messages
    });
</script>

当我看到消息时,它会将我指向 jQuery(document).ready 部分。

再次,当我正常加载页面时,它工作正常。当我自己键入 Home 时,它​​工作正常。只有当我键入 Home/AnythingElse 时,它​​才会给出此错误消息。即使我键入 Home/ 应该加载到索引文件中,它也会给我这个错误消息。

jQuery 已经定义好了,为什么会在 postback 上发生呢?

感谢任何帮助。

【问题讨论】:

  • '不是为 MVC 设计的'?我认为您需要回到 ASP.Net 教程页面。没有冒犯,是的,我是认真的。我不像下一个人那样喜欢 ASP,但它已经是 MVC 很长一段时间了,据我所见,你已经把事情复杂化了。如果他们仍然有它,请查找有关制作 MVC 音乐库的教程。
  • 您指向的 jQuery 文件可能不存在,唯一的原因是 jQuery 未定义
  • 无意冒犯,感谢您的回答。你错过了我所说的“开箱即用”它只是客户端的东西,所以当然有足够的调整它可以与 MVC 一起使用。但我相信从网站上的代码来看,它都是 html4 / css2。当然,它可以在任何地方使用足够的代码来支持兼容性,但我在一年前完成了音乐教程,所以我现在有点超越它(尽管仍在学习)。此外,我通常喜欢 asp .net c# 和其他 MS 技术。谢谢。 :)
  • @mcpDESIGNS 我确实检查了该文件是否存在。因此问题。检查文件是否存在比发布长描述性问题并回复答案更容易。无论如何,如果它不存在,它在第一次加载时将无法工作。不过谢谢你的建议。 :)

标签: c# javascript jquery razor asp.net-mvc-4


【解决方案1】:

尝试将 jQuery 的 src 设置为绝对来自站点根目录:

<script src="/assets/plugins/jquery-1.8.3.min.js" type="text/javascript"></script>

注意assets 之前的/ - 当您的 src 路径不以 / 开头时,浏览器将尝试加载相对于当前路径的资产,因此在您的示例中,当您将尾部斜杠添加到Home 它将尝试从 Home/assets/plugins/... 加载 jQuery

【讨论】:

  • 我现在在其他地方遇到错误,但至少它不再是那个错误了(所以如果需要,我会发布另一个问题)。谢谢你。我忘记了浏览器的东西,我什至没有教过它。
  • 主要是为了我自己的参考,当我回顾这个时我想补充一点,有些情况这还不够,在这种情况下你还必须使用传统的MVC标准来找到家目录。即在这种情况下使用 ~/assets 。虽然单独使用 / 解决了最初的问题,但它又回来困扰我,直到我也把这个 ~ 放在它前面。再次感谢您的回答(似乎基础知识每次都能吸引我)。
【解决方案2】:

对我来说,MVC 捆绑器造成了问题(在我的例子中是 ui 捆绑器)

这是对我有用的顺序。

    <script src="/Scripts/modernizr-2.5.3.js"></script>
    <script src="/Scripts/jquery-1.7.1.js"></script>
    <script src="/bundles/jquery-ui"></script>
    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
    <script src="/Scripts/jquery.validate.js"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.js"></script>

【讨论】:

    【解决方案3】:

    你需要像这样在 validate.js 之前先添加 jquery-x.xx.x.js

    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script src="~/Scripts/jquery.validate.js"></script>
    

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      相关资源
      最近更新 更多