我想从我的数据库中获取一个字符串并将其放入我的段落中:
<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
答案 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>