javascript - 通过 AJAX 加载的 HTML 内容会乱序加载外部 JavaScript

标签 javascript jquery ajax

这是场景,不确定我错过了什么。

  • 页面 A.htm 向页面 B.htm 发出 ajax 请求,并将响应插入到页面中。

  • Page B.htm 包含指向其他几个 JS 文件的链接,其中许多文件包含用于初始化它们的 document.ready() 函数。

当 A.htm 和 B.htm 位于同一服务器上时,此方法可以正常工作,但当它们位于不同服务器上时,则效果不佳。

认为我在这里看到的是,当页面A和B位于不同的服务器上(跨域ajax)时,外部资源将异步返回,或者至少是乱序返回,因此脚本正在执行,期望 JQuery.UI 已加载,但实际上尚未加载。

感谢任何指示或建议。对于糟糕的解释表示歉意。

最佳答案

您正在通过 jQuery 注入(inject) HTML + 脚本标签。在这种情况下*:

  • 文档中注入(inject)除脚本之外的 HTML 内容
  • 然后将所有脚本一一执行
  • 如果脚本是外部脚本,则异步下载并执行该脚本

因此,依赖于 jQuery UI 的外部或内联脚本可能会在 jQuery UI 之前执行。

一种可能的解决方案是更改页面的工作方式:

  • 删除 pageb.html 中的外部脚本,但保留内联脚本
  • 在 pagea.html 中加载所需的脚本
  • 加载pageb.html

另一个解决方案是推出您自己的 jQuery 函数,它将:

  • 删除所有 <script src> HTML 元素
  • 按顺序下载并执行这些脚本
  • 注入(inject)剩余的 HTML

* 确切的行为没有记录。我不得不调查source code推断细节。

关于javascript - 通过 AJAX 加载的 HTML 内容会乱序加载外部 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289932/

相关文章:

javascript - 通过点击按钮获取一行的id和value

javascript - jQuery/以编程方式在选择框中选择一个选项

javascript - 自定义 http header 破坏 CORS

javascript - npm 错了!安装在 Electron 应用程序中使用的请求模块时的代码1

javascript - Paper.js - 导出光栅

jquery - 可滚动的div,找到中间值的title

javascript - 三层 Accordion - 单击第一层即可展开第三层

javascript - 单击第二个按钮后服务器端的隐藏字段会更新

jquery - PhantomJs 脚本中的 Ajax 请求

javascript - 如何从单个 GeoJSON 属性创建值数组?