jQuery/Ajax 加载的 DOM 脚本何时实际执行?

2024-02-15

好吧,我觉得问这个问题有点愚蠢。类似问题有很多点击,但我似乎无法回答正确。如果我通过 jQuery/Ajax 修改 DOM,加载的脚本何时实际解析/执行?

下面的代码适用于 F/F,但不适用于 Chrome 或 Opera。 “工作”意味着它执行“do_init()”没有错误。加载的脚本(实际上是一个 svg 文件;“file.svg”)定义了“do_init()”(位于“static”脚本中)所需的许多变量。这些变量对 F/F 可见,但对 Chrome 或 Opera 不可见(“变量 xxx 未定义”)。在所有 3 种情况下,文件/脚本都正确加载到 DOM 中,并且包含<svg>,有一个<script>在里面。

我可以通过重新安排代码让它在 Opera 中工作(svg 显示)(或在 F/F 中中断),但不能在 Chrome 中工作。使用 .success 和 .complete 没有区别。

Thanks.

<head>
...
<script type="text/javascript" src="do_init.js"></script>          
<script type="text/javascript"><![CDATA[
jQuery(document).ready(function() {
   ...
   $("#submit").click(function(e){
      e.preventDefault();
      var jqxhr =
         $("#svg").html(ajax_load).load("file.svg", function(response, status, xhr) {
            if(status == "error") {
               var msg = "Error: ";
               $("#error").html(msg + xhr.status + " " + xhr.statusText);
            } else {
               do_init(); // Ok in F/F, not in Chrome/Opera
            }
      });
   });
});
]]></script>
</head>
<body>
<button id="submit" type="button">Click Me!</button>
<div id="svg"></div>
</body>

EDIT 1

事实证明,它们从未被执行过——至少在 IE9、FF8、Chrome、Opera 和 Safari 中是这样。他们are在FF7中执行。我刚刚编写了一个最小的测试页面,它对脚本进行 Ajax 加载,这只是一个警报。这仅在 FF7 中显示警报。我也尝试过将脚本包裹在<svg>,这没有什么区别。


这就是为什么建议您将 javascript 放在文档末尾、正文末尾的部分原因。

一般情况下,javascript遇到就执行;如果将其放在文档的顶部,它将在加载过程中较早运行,如果放在末尾则较晚运行。但是,当使用库的“onLoad”或“domReady”功能时,您会将执行推迟到稍后的时间。

请参阅 jQuery 文档以获取更多信息:http://api.jquery.com/ready/ http://api.jquery.com/ready/

虽然 JavaScript 提供了在渲染页面时执行代码的 load 事件,但只有在完全接收到所有资源(例如图像)后,才会触发该事件。在大多数情况下,一旦 DOM 层次结构完全构建完毕,脚本就可以运行。传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他 jQuery 代码的最佳位置。当使用依赖 CSS 样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素非常重要。

EDIT我误读了你问题的细节。动态加载的脚本会立即解析,但是onLoad事件可能(也可能不会!)根据加载脚本的 HTTP 传输方面触发,而不是根据加载脚本的解释触发。通常,这很好(尽管有些浏览器不能可靠地触发事件 - IE,看着你),但你所追求的时间不是脚本被获取的时间,而是实际解析和活动的时间。这些应该在几毫秒内,通常使得差异毫无意义。

使用此技术解决问题有一些不同的看法,其中一些已讨论here http://www.ejeliot.com/blog/109 and here http://unixpapa.com/js/dyna.html- 但似乎没有人具体提到 Chrome 是麻烦的根源。也就是说,轮询所包含脚本(通过超时)的建议方法似乎是建议中最不容易失败的方法,尽管这也是我最不喜欢的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery/Ajax 加载的 DOM 脚本何时实际执行? 的相关文章

  • 如何比较 JavaScript 表格中的单元格并测试是否相等? indexOf 是如何工作的?

    我在 HTML 代码中创建了一个表格 它有 9 列和 13 行 它被 JavaScript 循环完全填满 该循环用几个数组中的人名填充它 但是 我想添加一个验证步骤 确保一行中没有两个单元格具有相同的值 并且每个单元格的值不会在其正下方的单
  • 如何在不接受焦点的元素上捕获键盘事件?

    我知道要处理输入字段中的键盘事件 您可以使用 input keyup function e var code e keyCode and 13 is the keyCode for Enter 但是 现在 我有一些div and li元素
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 如何使用 .net 2.0 中的 WebBrowser 控件检查 ajax 更新?

    我有一个网页正在使用 WebBrowser 控件在 winform 应用程序中显示 我需要在网页中的 HTML 发生变化时执行一个事件 但是 我找不到通过 Ajax 更新页面时触发的事件 DocumentComplete FileDownl
  • 为什么视频在插入 DOM 之前就播放了?

    为什么执行类似下面的事情 var videoBg videoBg
  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • 重新加载页面时删除哈希值?

    我使用哈希来切换我的图像滑块 当我重新加载页面并且哈希值设置为 e h 3 没有图片 当图库在几秒钟后自动滑动时 它显示下一个 所以几秒钟内什么也没有 有没有办法在加载页面时检查哈希并将其删除 我只想关心那些用散列为页面添加书签的人 问候
  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • Django Ajax ModelForm 向 request.POST 提交一个空表单

    对于 django ajax 和 jquery 我是个新手 所以如果我的问题显得微不足道 我提前道歉 我已经在这个问题上摸不着头脑有一段时间了 但我正在尝试使用 ajax 和 jquery 通过 jQuery UI 提供的模式对话框窗口提交
  • iphone jquery 移动闪烁问题

    我在 iPhone 上使用使用 jQuery mobile 开发的应用程序时遇到闪烁问题 我尝试了互联网上提供的几种解决方案 包括 CSS 更改 将过渡设置为 无 甚至在 jquerymobile js 中注释代码 但没有运气 我使用的 J
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • 返回视图作为 JSON 对象的一部分

    我有一个应用程序只加载一次完整视图 我这样做的原因并不重要 重要的是 其余内容只会以部分视图的形式返回 除了一些内容之外 我还有一些 JSON 对象 我想通过每个 AJAX 请求在服务器之间来回传递 有没有办法返回一个 JSON 对象 并将
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • javascript - 如何获取对象名称或关联数组索引名称?

    我有一个像这样的 JSON 对象 var list name1 element1 value1 name2 element1 value2 如何提取所有 nameX 字符串值 例如 假设我想将它们连接在一个字符串中输出 例如 name1 n
  • 将 html 文本框的值分配给 div 的标题

    line 1
  • 从 jQuery UI 对话框调用 Bootstrap 模式:超出最大调用堆栈大小

    我有一个有点奇怪的问题 我正在调用 Bootstrap Modal 同时打开了 jQuery UI 对话框并且正在获取RangeError Maximum call stack size exceeded 在控制台中 奇怪的是 只有当我在打

随机推荐

  • 使用 HTML5 文件阅读器并将其发送到 Leaflet Omnivore

    我正在使用 Leaflet JavaScript 并遵循本教程 https www html5rocks com en tutorials file dndfiles https www html5rocks com en tutorial
  • 来自 socket.io 的新 cookie 值不起作用?

    我尝试对多个浏览器窗口 页面使用socket io id 用于 SNS auth process 使用凡奥特 http everyauth com 该项目基于express http expressjs com 这是我的项目设计 维护 so
  • 如何比较两个DateTimeOffSet?

    我有一个 DateTimeOffSet 类型的变量 我想过滤 2010 年 1 月 1 日之后创建的所有项目 所以我写了以下查询 var date new DateTimeOffset 2010 01 01 0 0 0 new TimeSp
  • 如何在 SQL Server 中编写(MySQL)“LIMIT”?

    如何将带有 LIMIT 的 MySQL 查询转换为 SQL Server 查询 SELECT FROM tableEating WHERE person identity LIMIT 1 LIMIT 在 T SQL 中不起作用 使用 TOP
  • VS 2013 多设备混合应用程序无法部署到设备,未找到设备

    我使用新的 VS 2013 Phonegap cordova 模板来创建混合应用程序 It all works fine using emulators and the ripple media emulators but when i c
  • 如何使 javascript 与 Ajax UpdatePanel 一起工作

    我正在尝试在我的表单上添加验证 我在表单字段中使用 AJAX 控件 当我删除更新面板和 AJAX 控件时 我的验证开始工作 但是当将两者放在一起时 我的验证不起作用 我怎样才能让他们一起工作
  • 将字节数组打印到热敏打印机 Java

    我正在使用 java 应用程序对 FedEx 进行 Web 服务调用 并尝试将标签打印到本地 USB 连接的热敏打印机 我将从 FedEx 获取字节数组作为响应 并希望将其打印到连接热敏打印机的客户端计算机 DocAttributeSet
  • 将对象从 JSP 页面传递回 Servlet

    简而言之 我想知道如何通过object从 JSP 页面返回到 Servlet 具体来说 我有一个表单元素 其操作标记引用了 servlet 在提交表单时 我想嵌入一个object in HttpServletRequest要求object以
  • 加载 ASP.NET 网页时缺少 Underscore.js 的 Javascript“.map”文件 [重复]

    这个问题在这里已经有答案了 我有一个网页 它是在 Azure 上运行的 ASP NET 网站的一部分 目前已经运行良好一段时间了 出乎意料的是 我突然在浏览器尝试下载 Underscore js 的 map 时遇到问题 我做了一些阅读 显然
  • 翻译 date("d F Y (H:i) 函数 php

    我是巴西人 有一个 wordpress 插件使用 date d F Y H i date Output 2013 年 1 月 16 日 00 54 但葡萄牙语应该是 16 Janeiro 2013 00 54 我该如何更改它 PS 我认为日
  • 如何通过 Qt 样式表自定义 Qt 应用程序的标题栏?

    我可以在 Qt 样式表中自定义 Qt 应用程序的控件 但是 我找不到自定义标题栏的方法 我找到了一些解决方案 但这需要修改应用程序本身的代码 无论如何 您是否可以仅使用 Qt 样式表来自定义它 标题栏 http en wikipedia o
  • 避免快速自动链接框架

    我有一个示例项目 https github com Usipov SwiftAutoFrameworksLinkage由一个主要目标 LinkerTests 和一个依赖的动态框架 Dynamic 如果运行该项目 您将看到以下 dyld 二进
  • 通过 angularjs 中的路由进行重定向

    我有以下要求 应显示包含编辑和删除链接的所有项目的列表 当用户单击编辑时 应出现带有文本框和保存按钮的编辑表单 现在 当用户编辑数据并单击保存按钮时 应保存数据 并且列表页面应再次显示修改后的数据 一切正常 但我如何通过 AngularJS
  • SQL Server使用C#执行备份

    我研究了使用 C 通过 SMO 创建数据库备份的可能性 该任务非常简单 代码也很简单 我只有一个问题 如何检查备份是否真正创建 Sql备份 Sql备份 http msdn microsoft com en us library micros
  • 如何在不使用 QtCreator 的情况下将 dll 文件复制到 Qt 中的输出目录?

    我有一个基于 Qt 的应用程序 它使用许多在项目外部构建的 dll 这些 dll 被签入源代码 因为我们不会非常频繁地重建它们 它们需要几个小时才能构建 我不希望它们出现在主项目中 我想在构建完成后将这些 dll 复制到适当的目录 发布 调
  • Powershell 表达式没有给出结果

    我创建了一个应返回 OU 规范名称的表达式 一个小轮廓 Search ADAccount LockedOut UsersOnly Select Object Name SamAccountName Name OU Expression Ge
  • 在 Django 中将变量从模板传递到视图的更有效方法是什么?

    我的问题涉及将变量从模板传递到 Django 中查看 我知道如何在 URL 中以及通过表单传递变量 我遇到的第一个问题是 url 可以被操纵 这不是我想要的 有什么办法可以防止这种情况发生吗 现在这就是我的创可贴
  • 如何编写一个使用 image magick 将图像切成碎片的 bash 脚本?

    我有许多输入图像 其中包含多个较小的图像 所有图像都位于一行中 所有包含的图像尺寸相同 因此 例如 图像input png may be 480x48并包含 1048x48图像 全部排成一排 使用imagemagickconvert工具 或
  • 卸载App后如何删除数据?

    我正在开发一个 Android 应用程序 它在 SD 卡中创建一个文件夹并存储一些图像 我想在卸载应用程序时删除该文件夹 请指导我 简单 不可能 目前 当您自己的应用程序被卸载时 不会触发卸载事件 因此你无法以任何方式对此做出反应 唯一的例
  • jQuery/Ajax 加载的 DOM 脚本何时实际执行?

    好吧 我觉得问这个问题有点愚蠢 类似问题有很多点击 但我似乎无法回答正确 如果我通过 jQuery Ajax 修改 DOM 加载的脚本何时实际解析 执行 下面的代码适用于 F F 但不适用于 Chrome 或 Opera 工作 意味着它执行