jQuery如何使循环等待,直到load()完成

时间:2014-04-25 08:38:41

标签: javascript jquery

我需要在"中加载"循环,但循环在主题开始加载之前完成。有人能帮我吗? HTML代码很好,唯一的问题是jQuery和Javascript。

var newTop = $("#invisForum").find('a:not(:has(span))'); //find every link which does not include span
var odkazy = new Array();
for (var i = 0; i < noveTop.length; i++) {
     odkazy[i] = $(noveTop[i]).attr('href'); //get the href attribute from every link
}

if (odkazy.length!=0){
   $("#unreadForum").css("visibility","visible"); //if there is any link, make table for links visible
}

for (var x = 0; x < odkazy.length; x++) {
    alert("The x in LOOP is "+ x);
    $("#spravneOdkazy").load(odkazy[x]+' td[style="white-space:normal;"]',function(){  
        topicy = $("#spravneOdkazy").find("td").find('img[alt="Uzavřeno"]');
        if (topicy.length>0){
             $("#unreadTable").find("tbody").append("<tr><th>"+$("#invisForum").find("span:nth-child("+x+")").text()+"</th></tr>");      
        }
        for (var y = 0; y < topicy.length; y++) {
             $(topicy[y]).parent().find("img").css("vertical-align","middle");        
             $("#unreadTable").find("tbody").append("<tr><td>"+$(topicy[y]).parent().html()+"</td></tr>");
        }
       alert("The X in LOAD is " +x);
    }); 
}

我希望输出为

  

LOOP中的X为0
LOAD中的X为0
LOOP中的X为1
  LOAD中的X为1,LOOP中的X为2,LOAD中的X为2
  LOOP中的X是3,LOAD中的X是3

但目前的输出是

  

LOOP中的X为0
LOOP中的X为1
LOOP中的X为2
  LOOP中的X为3
LOAD中的X为0
LOAD中的X为1
  LOAD中的X为2,LOAD中的X为3

因为load()函数需要一段时间才能加载,并且循环在第一次load()完成之前完成。我可以让循环等到每个load()完成后再继续吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试创建递归函数,而不是在.load()回调中调用自身的实际循环。

function loop(array,x){

    if( isNaN(x) ) x = 0;

    console.log("loop: "+x);

    $("element").load(array[x],function(){

        console.log("load: "+x);

        //Do your stuff here

        if( array.length > x+1 ) loop(array,x+1);

    });

}

var array = ["link1","link2","link3"];
loop(array);

此函数的运行方式与循环非常相似,只是在它再次运行之前它会等待来自.load()的回调。

答案 1 :(得分:0)

您正在尝试强制Javascript以同步方式工作,同时使用jquerys asynchonous加载函数。

在这种情况下使用异步编程有一个很好的理由:因为与程序中的所有其他步骤相比,在Internet上加载数据需要很长时间。

我建议你不要试图强迫这个程序以你习惯的同步方式运行。相反,你应该尝试理解并使用异步编程,它是有用的。任何关于Javascript的好书都会教你如何掌握这些知识。为了深入研究,我建议Burnham, T. 2012. ASYNC JavaScript: Build More Responsive Apps with Less Code. Pragmatic Bookshelf.