异步jquery和循环的问题

异步jquery和循环的问题,jquery,arrays,loops,module,Jquery,Arrays,Loops,Module,我很困惑。我试图通过循环数组并调用我编写的名为addModule()的方法,将门户附加到页面。该方法以正确的顺序被调用了正确的次数(通过警报语句检查),但实际上只填充了一到两个门户。我感觉它与循环和异步有关,但代码更容易解释: moduleList=[['weather'、'test']、['test'] for(模块列表中的i){ $(“#内容”)。追加(“”); 对于(模块列表[i]中的j){ addModule(i,moduleList[i][j]);//列,名称 } } 函数addMod

我很困惑。我试图通过循环数组并调用我编写的名为addModule()的方法,将门户附加到页面。该方法以正确的顺序被调用了正确的次数(通过警报语句检查),但实际上只填充了一到两个门户。我感觉它与循环和异步有关,但代码更容易解释:

moduleList=[['weather'、'test']、['test']

for(模块列表中的i){ $(“#内容”)。追加(“”); 对于(模块列表[i]中的j){ addModule(i,moduleList[i][j]);//列,名称 } }

函数addModule(列、名称){ 警报(“添加模块”+名称); $.get('/modules/'+name.replace('''-')+'.php',函数(数据){ $('#'+列).append(数据); }); }


对于主数组中的每个数组,我都会添加一个新列,因为每个子数组都是一列门户。然后我循环遍历该子数组,并在该列上调用addModule和该模块的名称(该模块工作正常)。在我的addModule方法中出现了一些错误,它只添加第一个和最后一个模块,或者有时添加中间的模块,或者有时根本不添加任何模块。。。我真糊涂

@patrick,谢谢你的建议,但这并不能解决问题。这与异步调用有关,因为如果我使用原语$.ajax而不是$.get将async设置为fase,那么我将以正确的顺序获取门户:)。但是使用sync非常糟糕而且非常慢,加上模块本身依赖于内部的异步代码…

@patrick,谢谢你的建议,但这并不能解决问题。这与异步调用有关,因为如果我使用原语$.ajax而不是$.get将async设置为fase,那么我将以正确的顺序获取门户:)。但是使用sync非常糟糕而且非常慢,加上模块本身依赖于内部的异步代码…

您确定这不是PHP的问题吗

它对我来说很好(使用备用http请求)

在此处测试:(更新)

当然,附加到同一列中的项目可能不会按照发送时的顺序进行附加。而是按照收到响应的顺序。不一定相同

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

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);
    });
}​
moduleList=[['weather','test'],['test'],['some','other'];
请求=['http://www.microsoft.com',
'http://www.apple.com',
'http://www.google.com'];
for(模块列表中的i){
对于(模块列表[i]中的j){
addModule(i,moduleList[i][j],j);//列,名称,j索引
}
}
//从内部for()循环接收“j”
函数addModule(列、名称、j){
//引用该列
变量$column=$(“#”+列);
//将新标记附加到具有
//“j”的值作为类名
$('',{className:j}).appendTo($column);
$.get(请求[列],函数(){
//将结果附加到适当列中的适当范围。
//(当然,您将附加返回的数据。)
$column.find('span.'+j).append(名称);
});
}​

您确定这不是PHP的问题吗

它对我来说很好(使用备用http请求)

在此处测试:(更新)

当然,附加到同一列中的项目可能不会按照发送时的顺序进行附加。而是按照收到响应的顺序。不一定相同

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

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);
    });
}​
moduleList=[['weather','test'],['test'],['some','other'];
请求=['http://www.microsoft.com',
'http://www.apple.com',
'http://www.google.com'];
for(模块列表中的i){
对于(模块列表[i]中的j){
addModule(i,moduleList[i][j],j);//列,名称,j索引
}
}
//从内部for()循环接收“j”
函数addModule(列、名称、j){
//引用该列
变量$column=$(“#”+列);
//将新标记附加到具有
//“j”的值作为类名
$('',{className:j}).appendTo($column);
$.get(请求[列],函数(){
//将结果附加到适当列中的适当范围。
//(当然,您将附加返回的数据。)
$column.find('span.'+j).append(名称);
});
}​

不知道这是否有助于解决问题,但ID不应以数字开头。只有一封信。我的理解是,你的一些请求没有得到回应。问题是您没有将它们整理好吗?如果问题仅仅是正确的顺序,那么我建议您的
addModule()
函数在适当的列中为它发出的每个
$.get()
请求创建一个枚举的
容器。然后,当收到响应时,将结果附加到适当的
span
编号。我将看看是否可以更新我的示例。下面的示例应确保正确的顺序:不知道这是否有助于解决问题,但ID不应以数字开头。只有一封信。我的理解是,你的一些请求没有得到回应。问题是您没有将它们整理好吗?如果问题仅仅是正确的顺序,那么我建议您的
addModule()
函数在适当的列中为它发出的每个
$.get()
请求创建一个枚举的
容器。然后,当收到响应时,将结果附加到适当的
span
编号。我会看看是否可以更新我的示例。以下示例应确保正确的顺序:(对不起,这是回应您的评论的唯一方式)@Seth-请使用您的对话答案下的评论功能。谢谢o) @Seth-这是因为您使用的用户名不同。如果你登录