javascript - 如何在加载另一段动态 HTML 后附加动态 HTML?

标签 javascript jquery css html twitter-bootstrap

我有一个 <OL>和一个读取 json 并加载到 <li> 中的函数的。然后我有另一个函数查看另一个 json 并加载最终的 <li> .我希望第一个函数首先触发,然后第二个函数附加最后一个 <li>后。但是,每 10 个左右的页面中就有 1 个加载第二个函数首先触发,然后 <li> s 出问题了。顺便说一句,用例是动态面包屑。我正在使用 Twitter Bootstrap 的面包屑类来设置这些元素的样式。

第一个触发器:

$.getJSON("/requirementdesc/{{ catalog }}/"+ c, function(d) {
 $.each(d, function(k, v) {
  $(".breadcrumb").append("<li><a href='/{{ catalog }}/"+ c +"'>"+ v.raw_requirement_desc +"</a></li>");
 });
});

第二个触发器:

$.getJSON("/parentrequirement/{{ catalog }}/{{ block }}", function(data) {
 $.each(data, function(key, value) {
  $(".breadcrumb").append("<li class='active'>"+ value.raw_requirement_desc +"</li>");
 });
});

我试过使用 .promise(),但没有成功。

最佳答案

使用 jQuery 的 $.when() ,它提供了一种基于表示异步事件的一个或多个对象执行回调函数的方法。此代码等待两个调用完成,然后按顺序将 li 附加到 ol

var li_1,
    li_2;

$.when(
  $.getJSON("/requirementdesc/{{ catalog }}/" + c, function (d) {
    $.each(d, function (k, v) {
      li_1 += "<li><a href='/{{ catalog }}/" + c + "'>" + 
        v.raw_requirement_desc + "</a></li>";
    })
  }),
  $.getJSON("/parentrequirement/{{ catalog }}/{{ block }}", function (data) {
    $.each(data, function (key, value) {
      li_2 += "<li class='active'>" + value.raw_requirement_desc + "</li>";
    })
  })
)
.then(function(){
    if(typeof li_1 === "string" && typeof li_1 !== "undefined") { 
      $(".breadcrumb").append(li_1);
    }
    if(typeof li_2 === "string" && typeof li_2 !== "undefined") { 
      $(".breadcrumb").append(li_2); 
    }
});

注意:我没有对此进行测试,但根据您的代码,理论上它应该可以工作。

关于javascript - 如何在加载另一段动态 HTML 后附加动态 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23703562/

相关文章:

html - Django:没有应用 CSS

javascript - 使用 jQuery 对数组中的元素进行动画处理

javascript - 将特定虚拟网址重定向到index.html

jquery - 防止搜索时后台调用ajax

javascript - 在加载页面时显示加载屏幕并进行一些繁重的后端工作?

html - CSS:让 block 元素填满父元素的整个空间?

javascript - 为什么我的光标没有聚焦在焦点元素上?

javascript - 一旦计算出第一行值,就启用表中的所有其他行

javascript - jQuery:隐藏的可见性选择器在 Firefox 3.6 中不起作用

html - 响应式视频背景 : Video alignment