当文档中的单个元素准备就绪时触发事件的最佳方法
Best way to fire events when single elements in the document becomes ready
我正在开发一个Web应用程序,由于性能问题,它严重依赖于Ajax功能。 我正在尝试在加载运行时间较长的模块时使每个页面的部分可用。
问题是我想尽快启动 Ajax 请求(在文档的头部)。 这部分工作正常;问题是在极少数情况下,Ajax 调用会在我要将 Ajax 数据加载到的区域出现在页面上之前返回。 这会导致无法加载数据。
为了解决这个问题,我开始在每个容器下面使用脚本标记,这些标记解析了 JQuery 承诺,让代码知道该区域可用。
编辑:我想在数据可用时立即将数据加载到该区域(在完全文档加载之前)。
当前的伪代码如下所示:
<head>
<script>
var areaAvailablePromise = new $.Deferred();
$.when(areaAvailablePromise, myAjaxFunction()).then(function(){
// load data into the element.
});
</script>
</head>
<!-- much later in the document -->
<div class="divIWantToLoadAjaxContentInto"></div>
<script>
areaAvailablePromise.resolve();
</script>
我的问题是:有没有更好的方法来处理这种情况? 每个人都知道内联脚本会阻塞并且对性能不利。 另外,我觉得这会导致到处都是带有微脚本标签的混乱代码。
把你的(整个)<script>
标签放在元素后面。
HTML 是从上到下解析的,因此元素已经加载。
No.据我所知,真的没有更好的方法了。
<!doctype html>
<html>
<head>
<script src="jquery.min.js"></script>
<script src="q.min.js"></script>
<script>
var elD = Q.defer();
var dataP = Q($.ajax(…));
Q.spread([elD.promise, dataP], function (el, data) {
…
}).done();
</script>
</head>
<body>
…
<div id="foo"></div>
<script>elD.resolve($("#foo"));</script>
…
</body>
</html>
您可以使用:
$(document).ready( handler )
(推荐)并且还具有合同形式:
$(处理程序)
示例:
$(function(){
alert("OK");
})
阅读更多:http://api.jquery.com/ready/
相关文章:
- 什么'是在HTML5画布中创建关键事件的最佳方式
- 在Nodejs中堆叠异步回调事件的最佳方式
- addEvent()传奇事件之后的当前最佳实践是什么
- 主干.js事件处理程序命名的最佳做法
- 在 Web 应用中处理事件跟踪的最佳(高性能)方法
- 将 react-redux 与基于事件的第三方库一起使用的最佳方法是什么?
- 用于查找基于时间的事件的最佳Javascript算法
- 通知全局事件组件的最佳方式
- 处理多次单击事件的最佳方式
- 在大型系统中附加事件处理程序的最佳做法
- 为输入字段(而不是表单的一部分)设置默认按钮(或在 javascript 中触发其事件)的最佳方法
- 当文档中的单个元素准备就绪时触发事件的最佳方法
- Javascript:注册事件处理程序的最佳位置
- 不再需要视图后取消委派事件的最佳方法
- React,在组件事件上呈现消息的最佳方法
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- 使用jsduck记录事件处理程序的最佳方式是什么
- 什么'是在AngularJS中处理应用程序状态和事件广播的最佳实践
- 从中停用单击事件的最佳方式是什么
- 跟踪javascript中文本框控件上触发的退格事件位置的最佳方法