我正在执行AJAX调用以检索处于特定状态的所有商店。问题是,最后2行无法访问我在get
调用中返回函数中构建的任何可变内容。JavaScript变量卡在循环内 - 无法访问
var states = ['TX', 'AZ];
for(j = 0; j < states.length; j++) {
var fullHTML = '';
var full2;
$.get("//127.0.0.1:8000/api/state-stores/", {state: states[j]}, function(data) {
console.log(data.stores.length);
for(var i = 0; i < data.stores.length; i++) {
store_html = '<tr><td>' + data.stores[i].name + '</td><td>'
fullHTML += store_html;
}
})
// PROBLEM HERE
console.log(fullHTML); //empty
$("#" + states[j].toLowerCase() + "-table").html(fullHTML); //does nothing
}
我该怎么做才能解决这个问题?我一直在尝试奇怪的全局变量技巧和各种黑客攻击,但没有任何工作。
UPDATE 我也试图把我的最后两行内的$.get
呼叫,但states[j]
是由于某种原因,在循环内无法访问。 经过调试,看起来好像只是j
在这个返回函数内部是无法从外部循环访问的。有没有办法解决这个问题?
更新2
我跟着建议在回答给定的,我上午得到正确连接的字符串为fullHTML
,但,每个fullHTML
字符串仅更换最后状态在桌子里。就好像TX
标签是唯一一个接收所有更新的标签。我认为这是基于封闭的,但我不知道如何解决这个问题。
$(function() {
var states = ['AZ', 'CA', 'CO', 'GA', 'NV', 'NC', 'SC', 'TX'];
// var states = ['CA'];
for(var j = 0; j < states.length; j++) {
var current = j;
$.get("//127.0.0.1:8000/api/state-stores/", {state: states[j]}, function(data) {
var fullHTML = '';
for(var i = 0; i < data.stores.length; i++) {
store_html = '<tr><td>' + data.stores[i].name + '</td><td>' + data.stores[i].address + '<span class="small-table"><br>' + data.stores[i].city + '</span></td><td>' + data.stores[i].city + '</td><td>' + data.stores[i].state + '</td><td>' + data.stores[i].postal_code + '</td></tr>'
fullHTML += store_html;
}
$('#' + states[current].toLowerCase() + '-table').html(fullHTML);
})
}
});
这不是_stuck_循环,它关于时间。在数据从服务器加载并分配给变量之前,您正在访问该变量。 **没关系,但如何解决这个问题?**只需移动'$ .get()'回调中的最后一条语句即可。 – Tushar
@Tushar请看我对我的问题的更新,为什么我想这样做,但遇到了问题。 – qarthandso
@qarthandso请参阅我的编辑以获取适用于'Update 2'的工作解决方案。此外,我不知道为什么这被标记为重复(特别是对于这个问题,因为这不是你要求的,但这[先前被问到](http://stackoverflow.com/questions/7053965/when-使用回调 - 在一个循环在JavaScript的是在那里任何方式来保存一个变种)其他地方,但重复没有指向一个相关的问题。) –