所以我刚刚使用jQuery的.load(),看起来我们无法将$("#example").load('./uri.ext #ID')
配置成链接:
$("#example").load('./uri.ext #ID1').load('./uri.ext #ID2').load('./uri.ext #ID3')
如果我们有一个DIV的模板文件或某些东西来动态构建页面而不是将HTML存储在字符串变量中或者沿着这些行存储的东西当然会有用...另外,我们可以保留其中的几个一个档案。
理想情况下,我希望使用该命令嵌套事物:
<div id="example">
<div id="ID1">
<div id="ID2">
<div id="ID3">
</div>
</div>
</div>
</div>
我遇到的问题是双重的。首先,请求的async : true
属性会导致下一个请求触发,并且放置不会按预期执行。然后我尝试运行嵌套的$(“#example”)。load('。/ uri.ext#ID1')。ajaxCompletes(function(){/ next .load()顺序 /最终进入一个没有结束的递归陷阱,并继续发送对这些文件的请求。
关于如何使用我尝试过的语法/方法完成我所要完成的任何想法?另外,如果这不是问题而只是对jQuery链接的误解,那么我将非常感谢对此的任何解释。
答案 0 :(得分:5)
您需要将它们嵌套在回调函数中以实现此目的:
$('#example').load('./uri.ext #ID1', function() {
$('#ID1').load('./uri.ext #ID2', function() {
$('#ID2').load('./uri.ext #ID3', function() {
// load successful
});
});
});
ES6 标准的编辑:
$('#example').load('./uri.ext #ID1', () => {
$('#ID1').load('./uri.ext #ID2', () => {
$('#ID2').load('./uri.ext #ID3', () => {
// load successful
});
});
});
答案 1 :(得分:0)
提出问题和答案。
我正在使用递归调用提供稍微更优雅的解决方案,以防其他人想要构建它。请注意,这并不直接回答原始问题的上下文。这是我自己的解决方案的背景,但这个想法是一样的。
var App = App || {};
App.Quiz = (function ($) {
"use strict";
var _templates = [{ target: "#quiz_main_template", url: "/UserControls/Quiz/Quiz_Main.tmpl.htm" },
{ target: "#quiz_media_left_template", url: "/UserControls/Quiz/Quiz_Media_Left.tmpl.htm" },
{ target: "#quiz_media_right_template", url: "/UserControls/Quiz/Quiz_Media_Right.tmpl.htm" },
{ target: "#quiz_no_media_template", url: "/UserControls/Quiz/Quiz_No_Media.tmpl.htm" }]
function loadTemplates(templates, callback) {
if (templates.length) {
var nextTemplate = templates.pop();
$(nextTemplate.target).load(nextTemplate.url, loadTemplates(templates, callback));
} else {
callback.call();
}
}
function init() {
loadTemplates(_templates, function () { alert("Done!");})
}
return {
init: init
};
})(jQuery);
$(function () {
App.Quiz.init();
});