【发布时间】:2012-05-22 05:28:54
【问题描述】:
我有一组要异步加载的内容 URL,例如
var toLoad = ['snippet1.html', 'snippet2.html', ... ];
我正在尝试使用 AJAX 加载每个 sn-p 并将其附加到父 <div>,保持数组中内容的顺序。由于我的其余代码的设置方式(以及出于性能原因),我不希望以同步方式加载,无论是使用async:false 还是通过链接.ajax() 调用,正如对this similar question 的回答所建议的那样。相反,我想将逻辑放入 AJAX 回调函数中,以根据索引正确放置加载的 sn-ps。
以下代码有效:
var $parent = $('#mydiv');
toLoad.forEach(function(url, i) {
// load snippet
$.get(url, function(snippet) {
// attach order to DOM element
snippet = $(snippet).data('order', i);
// find the sibling with the next lowest order number
var $prev = $parent
.children()
.filter(function() {
return $(this).data('order') < i
})
.last();
if ($prev[0]) snippet.insertAfter($prev);
else $parent.prepend(snippet);
});
});
...但我不喜欢它。特别是,我不喜欢使用.data() 将订单附加到DOM 元素;这看起来很难看,如果可以的话,我宁愿不把它放到 DOM 中。
有没有更好的方法来实现将内容异步加载到具有预定义顺序的 div 中?
【问题讨论】:
-
是否可以将所有加载推迟到获取所有值之后?然后您可以构建一个数组来跟踪每个请求的结果,并仅在获取所有 url 后附加到 DOM。
-
@DCoder - 这可能行得通 - 但它并不理想,因为我必须添加额外的逻辑来跟踪是否所有调用都已完成。
标签: jquery asynchronous append