2010-06-13 119 views
1

我很困惑。我试图通过循环访问数组并调用我编写的方法addModule()来将门户附加到页面。该方法按照正确的顺序被调用正确的次数(通过alert语句进行检查),但实际上只有一个或两个门户被填充。我有一种感觉,它与环和异步的东西,但它更容易与代码解释:问题与异步jQuery和循环

moduleList = [['weather','test'],['test']];

for(i in moduleList) { $('#content').append(''); for(j in moduleList[i]) { addModule(i,moduleList[i][j]); //column,name } }

function addModule(column,name) { alert('adding module ' + name); $.get('/modules/' + name.replace(' ','-') + '.php',function(data){ $('#'+column).append(data); }); }

主阵列中的每个阵列,我追加一个新列,因为这正是每个子阵列是 - 一列门户网站。然后我遍历该子数组,并在该列上调用addModule以及该模块的名称(该模块可正常工作)。在我的addModule方法中发生了一些错误,它只添加第一个和最后一个模块,或者有时候是中间模块,有时甚至没有模块......我很困惑!

+0

不知道这是否有助于解决问题,但ID不应以数字开头。只有一封信。 – user113716 2010-06-13 14:47:41

+0

我的理解是,你没有得到你的一些请求的回应。问题是你没有得到他们的顺序? – user113716 2010-06-13 15:15:09

+0

如果问题仅仅是正确的顺序,那么我会建议你的'addModule()'函数为它所做的每个'.get()'请求在适当的列中创建一个枚举的''容器。然后当收到响应时,将结果追加到适当的“span”编号。我会看看我是否可以更新我的例子。 – user113716 2010-06-13 15:29:56

回答

1

你确定这不是一个问题与您的PHP?

它适用于我(使用替代http请求)。

测试在这里:http://jsfiddle.net/kkxBH/1/(更新)

当然,追加到同一列的项目可能不会追加在相同的顺序,他们被送往。而是按照收到回复的顺序。不一定是一样的。

编辑:更新以确保正确的顺序。

moduleList = [['weather','test'],['test'],['some','other']]; 

request = ['http://www.microsoft.com', 
      'http://www.apple.com', 
      'http://www.google.com']; 


for(i in moduleList) { 
    for(j in moduleList[i]) { 
     addModule(i,moduleList[i][j], j); //column,name, j index 
    } 
} 

    // Receive "j" from inner for() loop 
function addModule(column,name, j) { 

     // Reference the column 
    var $column = $('#'+column); 

     // Append a new <span> tag to the column that has 
     // the value of "j" as the class name 
    $('<span/>',{ className:j }).appendTo($column); 

    $.get(request[column],function() { 
      // Append the result to the proper span in the proper column. 
      // (Of course, you'll be appending your data returned.) 
     $column.find('span.' + j).append(name); 
    }); 
}​ 
0

@patrick,感谢您的建议,但这并不能解决问题。它与异步调用有关,因为如果我使用基元$ .ajax而不是$ .get来设置异步,我会按照正确的顺序获取我的门户。但使用同步是非常糟糕,非常缓慢,加上模块本身依赖于内部的异步代码...

+0

(对不起,这是回复您评论的唯一方式) – sethvargo 2010-06-13 15:10:44

+0

@Seth - 请使用您的答案下的评论功能为对话。谢谢。 :o) – user113716 2010-06-13 15:11:47

+0

@Seth - 这是因为您正在使用不同的用户名。如果您使用原始帐户登录,则至少应该能够对您的问题发表评论。 http://stackoverflow.com/users/365546/seth-vargo – user113716 2010-06-13 15:12:41