私は特定の状態のすべてのストアを取得するために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
}
これを修正するにはどうすればよいですか?私は奇妙なグローバル変数のトリックやハックyのすべての種類のものを試してきましたが、何も動作していません。
UPDATE 私も内部$.get
コール私の最後の2行を配置しようとしたが、states[j]
は、ループ内でアクセスできない何らかの理由です。 デバッグ後、この戻り関数内では外側ループからのj
がアクセス不能になったようです。それを修正する方法はありますか?
UPDATE 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);
})
}
});
ループの中には止まっていません。変数は、サーバーからデータをロードして変数に割り当てる前に変数にアクセスしています。 **これは問題ですが、これを解決する方法は?**最後の文を '$ .get()'コールバックの中に移動するだけです。 – Tushar
@ Tusharなぜ私はこのようにしたいのですか?私の質問に私の更新を見てくださいが、問題に遭遇しました。 – qarthandso
@karthandsoあなたの 'Update 2'への働く解決策について私の編集を見てください。また、私はなぜこれが重複としてマークされているのか分かりません(特に、その質問には、あなたが求めていたものではありませんが、これは以前に尋ねられました)(http://stackoverflow.com/questions/7053965/when-他の場所でコールバックを使用してループ内でループを使用していますが、複製は関連する質問を指していません) –