【问题标题】:Attempting to debug JavaScript and jQuery - where to go with this...?尝试调试 JavaScript 和 jQuery - 去哪里用这个......?
【发布时间】:2012-04-27 14:26:33
【问题描述】:

我们公司的网站有一个 JavaScript 问题,我正在拼命尝试解决,但真的很挣扎。我的 JS 技能足以用 jQuery 之类的东西构建网站,但我对调试并不那么精通 - 所以非常感谢任何帮助。

页面上的所有 JS 组件(例如 jQuery Datepicker)看似随机地停止工作。在错误控制台打开的情况下强制重新加载页面时,这些错误大约有 60% 的时间发生 - 它似乎没有任何模式。一旦发生这种情况,修复网站的唯一方法是清除缓存并重新加载。

控制台输出以下内容:

Uncaught TypeError: Object #<Object> has no method 'each'
Uncaught TypeError: Object #<Object> has no method 'not'
Uncaught TypeError: Object #<Object> has no method 'each'

然而:这只是一个例子。其他时候我会得到完全不同的错误。例如。提交这个问题几分钟后,我又试了一次,得到了这个:

Uncaught TypeError: Cannot call method 'apply' of undefined

再次从 jquery.min.js 抛出 - 打印精美,第 1453 行(第三行向下):

 if (g.call(k) === "[object Array]")
     if (!u)
         e.push.apply(e, k);

我将 Chrome 设置为中断所有未处理的异常,这是它捕获的另一个异常 - 在缩小的 jQuery 库的第 3 行。下图是印刷精美的版本:

try {
    b.call(c.documentElement, "[test!='']:sizzle")
    } catch (f) {
        e = !0
    }

实际的错误行以b.call[...] 开头。这适用于 jquery.min.js 的第 1904 行。

  • 我使用的是最新的 jQuery
  • 这只是最近才开始发生 - 在没有改变之后!
  • 错误似乎是随机发生的
  • 通常(但有时),my 脚本不会引发错误 - 例如script.js - 通常它们是从缩小的库中抛出的。每次都不一样。
  • 这似乎在所有浏览器中都会发生,但在 Chrome 中比在 Firefox 中更常见

任何想法从哪里开始?不幸的是,这是一个内部公司网站,因此提供访问权限很棘手,因为我们处理整个网站的敏感数据。

感谢您的帮助!

【问题讨论】:

  • “我需要帮助,但我不会显示代码”。那我们该如何帮助呢?清除缓存,打开开发工具 -> 网络。然后,打开您的页面,并验证是否已加载所有文件。如果文件加载正确,请检查文件是否以正确的顺序加载和执行。
  • 您可以忽略来自 Sizzle 的 b.call 行上的错误,这是一条红鲱鱼。它正在测试 应该 失败的东西是否真的失败了,它在 Chrome 上会失败(而不是在 Firefox 上,因此是测试)。
  • @RobW 我意识到这听起来像,我很抱歉 - 我会尝试编辑问题并添加更多代码。
  • @RobW 感谢您的编辑。我听从了你的建议——所有文件都以正确的顺序加载——首先是文档,然后是样式表,然后是 JS——从 jQuery 开始,然后是我们的插件,然后是我们的自定义脚本文件。在这方面一切似乎都是正确的......只是从 jquery.min.js 中得到错误Uncaught TypeError: Cannot call method 'apply' of undefined...... - 我还更新了我的问题以进一步解释这一点。
  • @JackWebb-Heller 消除可能的原因:创建一个新的 Chrome/Firefox 配置文件。固定的?不? 2) 禁用您网站上的所有模块。继续添加模块,直到您再次看到错误为止。

标签: javascript jquery debugging google-chrome google-chrome-devtools


【解决方案1】:

在我看来,您的页面很大,并且浏览器会在 DOM 完全加载之前尝试执行 js 代码……可能是因为您使用的是内联 javascript 代码..

这可以解释随机错误以及强制重新加载时出现错误的事实。

我建议你把你的 JS code inside a dom ready event,这样 js 代码可以毫无问题地执行..

希望这会有所帮助:)

【讨论】:

  • 错误信息与此类错误不符。错误消息表明 jQuery 无法正确加载。
  • 感谢您的回答 - 刚刚查看了源代码,我们没有内联代码。所有内容都以正确的顺序在&lt;script src=""&gt; 标签中引用。
  • 奇怪的是,这个答案的接受与 OP 对此答案的评论不一致。
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多