【问题标题】:getElementById using a looping variable [duplicate]使用循环变量的getElementById [重复]
【发布时间】:2017-06-15 03:39:59
【问题描述】:

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

<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

【问题讨论】:

  • 能否请您也提供返回数据?
  • 你在循环外检查data[0].question

标签: javascript jquery html node.js express


【解决方案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>

【讨论】:

  • 快点打败我吧,伙计。
  • 如果您了解更多信息,请随时编辑我的答案。
  • 但是为什么要去掉 AJAX 呢?似乎很关键
  • @XavierJ ajax 不需要演示问题/解决方案。
  • @KevinB 是对的,这适用于所有异步操作,而且大多数 JS 沙箱不允许发出网络请求(虽然没有尝试过)
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多