getElementById使用循环变量

时间:2017-06-14 19:29:39

标签: javascript jquery html node.js express

我想从我的数据库中获取一个字符串并将其放入我的段落中:

<p id="q_1"></p>
<p id="q_2"></p>

这在这里工作正常:

$.get("bewertung/get/1", function (data) {
      document.getElementById("q_1").innerHTML = data[0].question;
})

这不起作用。为什么以及如何解决这个问题?

for( var j = 1; j <= 5; j++){
    $.get("bewertung/get/"+j+"", function (data){
         document.getElementById("q_"+j+"").innerHTML = data[0].question;
    })
}
//data[0].question is the field in the DB

1 个答案:

答案 0 :(得分:1)

这是因为当您从服务器收到响应时(或者执行任何其他异步操作循环并且j变量将具有值6)。为了防止这种情况,需要为for循环中使用的异步操作创建闭包。请注意,我使用了setTimeout而不是AJAX。

for( var j = 1; j <= 5; j++){
    (function(k) {
        setTimeout(function() {
           document.getElementById("q_" + k).innerHTML = 'data';
        });
    })(j);
}
<p id="q_1"></p>
<p id="q_2"></p>
<p id="q_3"></p>
<p id="q_4"></p>
<p id="q_5"></p>