3

所以我刚才正在使用 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() in sequence /})` 最终在一个递归陷阱,它没有结束并不断发送对这些文件的请求。

关于如何使用我尝试过的语法/方法来完成我所追求的任何想法?另外,如果这不是问题,只是我对 jQuery 链接的误解,我会非常感谢任何解释。

4

2 回答 2

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
        });
      });
    });
于 2010-09-17T14:24:01.823 回答
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();
});
于 2017-03-22T14:42:17.333 回答