Javascript调用函数一旦循环完成,jQuery就会填充内容

时间:2011-10-21 06:03:33

标签: javascript jquery loops asynchronous

我正试图让我的jQuery在这个流程中工作:

  1. 使用$ getJson
  2. 解析json
  3. 循环返回JSON并为每个JSON项创建div
  4. 完成后,重复但使用另一个json文件,并将结果附加到现有结果。
  5. 但是到目前为止,我无法在第一个循环完成后调用另一个函数,因为在填充页面之前会调用该函数。如何完成填充循环,然后调用另一个函数?

    我感谢你能给我的任何帮助。你还可以学习。

    function test() {
      var i;
      for(i=0;i<=10;i++) {
        $("div#test").append("<div id='"+i+"'></div>");
      }
      when_loop_is_done();
    }
    function when_loop_is_done() {
      var i;
      for(i=0;i<=10;i++) {
        $("div#test div#"+i).append("<span>foo</span>");
      }
    }
    

    基本上我从服务器上的一个单独的页面抓取JSON,然后使用该JSON对象中的变量循环并填充内容。问题是无论我做什么,第二个函数总是在jQuery填充内容之前被调用。因此,如果我在循环完成后调用警报,页面将弹出警报,然后加载所有附加的html。

2 个答案:

答案 0 :(得分:1)

将结果存储在变量或属性中。然后,使用$(document).ready(fn)等待页面完成加载并填充页面或在加载完成后完成工作。

答案 1 :(得分:0)

您的代码应如下所示:

   $.getJSON('/remote.json', function (response) {
     // do the first loop using the response json
   })
   .done(function () {
     // do the second json request and loop through the results
   });

在done()方法的回调函数中调用的任何代码都将等到链中的前一个方法完成。您一定要查看$ .getJSON的API文档:https://api.jquery.com/jquery.getjson/