【问题标题】:Javascript not loading properly under some circumstancesJavascript 在某些情况下无法正确加载
【发布时间】:2014-04-25 16:24:44
【问题描述】:

我们有一个使用 jQuery 和 Javascript 的网站(使用 HTTPS)。我们注意到,在某些情况下,Javascript 根本不会加载。在控制台中,它只是打印出一些 JS 错误(未定义),但我不能说这是因为 js 文件没有被包含或某处存在一些语法错误。

当我使用一些访客互联网时会发生这种情况(在斯坦福大学和埃默里大学尝试了访客 Wifi)。有时即使我在办公室也会发生这种情况,大约 10 分钟后就会恢复正常。它只发生在办公室的某些计算机上(所有带有 safari 的 MAC OSX),其中一些很好。除非我在一些访客 wifi 下,否则它就像完全随机的。

可能是什么原因?

最好, 杰克


编辑: 有人觉得它太板了,对不起这个问题,但我正在尽我所能描述这个问题。这以随机方式发生,并且不会通过在发生时刷新页面来解决。并且所有的javascript文件都以https方式包含。

编辑: 我注意到在某些情况下,我在调用它们的位置之后定义了函数。会不会是这个原因?

【问题讨论】:

  • 听起来像是竞争条件。您是否异步加载任何脚本?你使用脚本加载器吗?
  • 您是否使用 Chrome(Firefox、IE > 8、Safari 等)工具中的网络选项卡来确认通过网络传输的具体内容?
  • @jameslafferty 不,我刚刚检查了控制台。我在我的 safari 中真的找不到网络标签,有什么想法吗?
  • @TheShellfishMeme 我想我异步加载我的实时聊天。但我觉得这个问题在我集成实时聊天之前就存在(不确定)。我应该如何检查这个?你能更具体地了解一下这个比赛条件吗?您的意思是在加载 socket.io 之前调用实时聊天吗?但是刷新页面并没有改变结果,直到你等待一段时间它仍然没有加载。然后一切都很好,即使你刷新。
  • 这确实很广泛,因为我们无法给出明确的答案,我们所能做的就是猜测可能的原因。我对此进行调试的建议是,作为第一步,您应该查看网络流量,例如 f.e.使用浏览器的开发者工具。在您遇到此错误的情况下,是否有任何突出的问题 - 任何中止的连接、意外的 HTTP 错误……?

标签: javascript jquery apache https


【解决方案1】:

您需要使用支持 https 的 Jquery CDN,或者将代码放在您自己的站点/服务器上并从您的域中包含它。以下是两个适用于 ssl 的示例。

<script type="text/javascript" 
    src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

我通常相信谷歌图书馆作为一个 CDN,这取决于你。

<script type="text/javascript" 
        src="https://mysite.com/static/js/jquery.min.js"></script>

如果您不想信任 google,可以自行部署。

【讨论】:

  • 好的,那么这是我的建议。尝试查找导致此错误的网络并将您要导入的 js 文件的 src 复制/粘贴到浏览器中,看看您是否可以访问该文件。如果可以,并且 src 以 https:// 开头,那么很可能问题不在于 cdn
  • 该网站是一个有多种布局的大型网站,代码非常非常长。我将无法在这里发布它。感谢您的建议!我认为这些文件是可以访问的。控制台中没有返回 404 错误。
  • 那么我不知道。除非访客网络阻止了您的 CDN(不太可能),并且只要您使用的是 ssl cdn,它就应该可以工作。如果您看到该文件已加载到您的源中,它应该可以工作。请发布您所说的错误,没有任何代码/错误很难帮助
【解决方案2】:

我看到很多人忽略了协议,以便它自动使用当前协议:

<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js'></script>

【讨论】:

  • 我现在正在为所有包含的脚本做 https://,这会有什么不同吗?整个站点只能通过 https 访问,如果您尝试从 htaccess 中的 http 访问,则会重定向到 https。
  • 这取决于您的网络服务器是如何设置加载静态文件的,但我认为如果所有内容都通过相同的协议加载也没关系
【解决方案3】:

我想补充一点,这可能不是 100% 的解决方案。经过更多测试后,有时我仍然看到我的至少一个 js 文件没有加载。我将所有 js 文件都托管在网站本身上,这让我认为将所有内容从 CDN 加载可能是最佳选择。

我还在页面本身中包含所有特定于站点的 js 代码,而不是尝试加载另一个 js 文件。

--

只是让您知道,我在我的一个网站上遇到了同样的问题。整个网站在 https 下运行,偶尔当我访问我的一个页面时,无论出于何种原因,javascript 文件都无法加载。我认为这是因为 https 确实会降低整体连接速度。

这是我解决问题的方法:

  1. 将所有 js 文件放在结束 body 标记之前。
  2. 从支持 https 的可靠 CDN 加载所有主要 js 文件(其他人提到了 CDN,如 Google 等)。

也许从 CDN 加载脚本并在页面底部放置行将有助于确保一切正常加载。

另一个建议,可能是将您所有的网站 js 文件合并到一个文件中,这样并发 js 请求就会更少。

我相信所有这些问题都源于与 https 相关的慢速连接和低速连接。

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多