Javascript 在循环中附加胡须模板
我试图多次附加相同的mustache模板,但每次都使用不同的值,这些值是通过ajax从php获得的。这些值存储在一个数组中 不幸的是,每个附加的模板都包含数组中最后一个条目的值 如果我添加了警报测试;在循环结束时,它正在工作。我必须等到append函数完成吗?如果是,我该怎么做 谢谢Javascript 在循环中附加胡须模板,javascript,jquery,ajax,mustache,Javascript,Jquery,Ajax,Mustache,我试图多次附加相同的mustache模板,但每次都使用不同的值,这些值是通过ajax从php获得的。这些值存储在一个数组中 不幸的是,每个附加的模板都包含数组中最后一个条目的值 如果我添加了警报测试;在循环结束时,它正在工作。我必须等到append函数完成吗?如果是,我该怎么做 谢谢 $(document).ready(function postData() { var id = localStorage.getItem('user-id'); var token
$(document).ready(function postData() {
var id = localStorage.getItem('user-id');
var token = localStorage.getItem('user-token');
var vars = "id=" + id + "&token=" + token;
var hr = new XMLHttpRequest();
var url = "../php/getUsers.php";
hr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var data = JSON.parse(hr.responseText);
for(var i=0;i<data.length;i++){
var templateData = {
name: data[i].name,
id: data[i].id
};
var id=templateData['id'];
$.get('templates/user.htm', function(templates) {
var template = $(templates).filter('#user-template').html();
$('#user-container').append(Mustache.render(template, templateData));
});
//alert("Test");
}
}
}
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send(vars);
});
问题是,当调用$.get调用的回调函数时,templateData在for循环的下一次迭代中已经发生了更改 要避免此常见的关闭问题,可以执行以下操作:
$.get('templates/user.htm', (function (templateData) {
return function(templates) {
var template = $(templates).filter('#user-template').html();
$('#user-container').append(Mustache.render(template, templateData));
}
})(templateData));
如果使用ES2015,则无需更改回调函数,因为可以使用let而不是var来定义templateData变量:
let templateData = {
name: data[i].name,
id: data[i].id
};
...
$.get('templates/user.htm', function(templates) {
var template = $(templates).filter('#user-template').html();
$('#user-container').append(Mustache.render(template, templateData));
});
查找setTimeout in loops的修复程序,相同的关闭问题…如果没有ES2015,在Arduino-Samsung Internet、Microsoft-Microsoft Edge上测试的移动设备上似乎不起作用。你知道我为什么以及如何修复它吗?你有错误吗?有没有一个控制台可以检查错误?我意识到这与我最初的问题无关。控制台显示:SyntaxError:JSON解析错误:如果this.readyState==4&&this.status==200,则意外的EOF和高亮显示行{我想我应该在单独的问题中询问此问题尝试记录hr.responseText:Console.loghr.responseText的值。有关此问题的新问题: