Javascript 尝试匹配来自多个回调的数据

Javascript 尝试匹配来自多个回调的数据,javascript,jquery,Javascript,Jquery,我在内存中有一个文件名数组。我需要列出这些文件名的列表,每个文件名都在一个按钮中,当点击按钮时,用户将进入另一个窗口。下面的代码成功地做到了这一点。但是,我还需要在每个文件名按钮旁边放一个包含在文件中的描述。因此,回调来查找描述字段,效果很好。不起作用的是得到一个回调,该回调会查找描述并将其附加到包含其来源的文件名按钮的列表项中。经过3天的努力,我发现回调返回的顺序似乎是随机的。因此,如何使文件描述显示在“文件名”按钮旁边是一个问题。我认为,如果回调中的nTestText保留了发出回调时的值,而

我在内存中有一个文件名数组。我需要列出这些文件名的列表,每个文件名都在一个按钮中,当点击按钮时,用户将进入另一个窗口。下面的代码成功地做到了这一点。但是,我还需要在每个文件名按钮旁边放一个包含在文件中的描述。因此,回调来查找描述字段,效果很好。不起作用的是得到一个回调,该回调会查找描述并将其附加到包含其来源的文件名按钮的列表项中。经过3天的努力,我发现回调返回的顺序似乎是随机的。因此,如何使文件描述显示在“文件名”按钮旁边是一个问题。我认为,如果回调中的nTestText保留了发出回调时的值,而不是当前构造的值,那么下面的代码就可以工作。那么,我怎样才能做到这一点呢。或者,也许有更好的方法。欢迎所有建议

    $('#stServerLoads').empty();
    var nTestText=0;
    for (iLoad=0; iLoad<nLoadsServer; iLoad++) {
        filename=sServerLoadArray[iLoad];
        if (filename.substring(0,4)=='TEST') {
            $('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>');
            $('button').eq(iButton).on('click', {value:filename}, function(event) {
                ...
                window.location='load.html';
            });
            iButton++;
            $.getJSON('reports/' + filename,function(new_ld) {
                $('#stServerLoads li').eq(nTestText).append('&nbsp;&nbsp;' + new_ld.testtext);
                nTestText++;
            });
        }
    }
$('stServerLoads').empty();
var nTestText=0;

对于(iLoad=0;iLoad如果我能很好地理解您,这将解决您的问题:

$('#stServerLoads').empty();
for (var i=0; i<nLoadsServer; i++) {   //changed counter name here
  (function(iLoad){   //We add a closure
    filename=sServerLoadArray[iLoad];
    if (filename.substring(0,4)=='TEST') {
        $('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>');
        $('button').eq(iButton).on('click', {value:filename}, function(event) {
            ...
            window.location='load.html';
        });
        iButton++;
        $.getJSON('reports/' + filename,function(new_ld) {
            $('#stServerLoads li').eq(iLoad).append('&nbsp;&nbsp;' + new_ld.testtext);
        });
    }
  })(i);  //Calling closure function with counter value
}
$('stServerLoads').empty();

对于(var i=0;我还有另一个ajax调用?嗯,不知道你在问什么。我有文件名,使用getJSON读取每个文件,其中一个字段是描述,然后我希望将其附加到列表项中。如果你问ajax调用以获取所有文件名,那么程序中前面有很多语句。哦,现在我不理解你。我已添加解决方案,请检查;)最好创建一个包含所有属性(包括click/class/)的新按钮元素,然后将其附加到#stServerLoads中。这是因为您没有使用iButton++,我认为这超出了范围……如果我理解正确,我想我明白了您的意思。我想知道闭包是否是解决方案,但实际上还没有我已经把它们弄出来了。这位老人现在该睡觉了,但我会在早上尝试实施你的解决方案,当我的大脑老化得更好的时候。非常感谢你的回答。欢迎。我访问了你的网页,我对你所做的事印象深刻。我很荣幸能在可能的情况下帮助你完成这样一个伟大的项目。你的解决方案很好。Also、 这使我能够更好地理解闭包。当你看到它们解决了你需要解决的实际问题时,它们会更有意义。另外,谢谢你的提议,我会记住它。你是否碰巧有任何航空方面的背景terrywb@q.com.HiTerry,我对航空一无所知呵呵,我只是个软件开发者.但是我可以帮你解决这个问题,我非常了解js和jquery。我的电子邮件是edgarinvillegas@hotmail.com.我尊敬你,我认识一些年龄只有你三分之一的人,他们连你代码中一半的东西都学不懂。祝贺你