私は以下のような配列を持っています。Javascriptの閉鎖は
var clients = ['a','b'];
var reports = ['x','y','z'];
var finalData = [];
これでこのようなループが必要です。
for(var i=0;i<reports.length;i++){
var response = {report : reports[i]}
for(var j=0;j<clients;j++){
response.client = clients[i];
$.ajax({
url :url,
success : function(data){
response.data = data;
finalData.push(response);
})
});
}
}
ajaxは非同期であるため、正しく動作しません。 また、これをreact.jsのcomponentDidMount関数にラップし、finalDataを状態にプッシュする必要があります。
私はループの代わりに$.each
を試して、最終データを状態にプッシュするには.bind(this)
を試しました。しかし、私は正しいデータを取得しませんでした。非同期呼び出しのクロージャが使用されるべきだと聞きましたが、ここでどのように実装されるのかは分かりません。 私が探している出力はです。
finalData = [
{client:a,report:x,data : 'xyz'},
{client:b,report:x,data : 'xyz'},
{client:a,report:y,data : 'xyz'},
{client:b,report:y,data : 'xyz'},
{client:a,report:z,data : 'xyz'},
{client:b,report:z,data : 'xyz'}
]
あなたは詳細のためにこれを見レポートや顧客価値を維持するためにクロージャを使用することができhttp://stackoverflow.com/questions/6077357/passing-index-from-for-loop-to-ajax-callback-function-javascript –
サンプルコードに複数のコーディングエラーがあります。例えば'clients [i]'は 'clients [j]'でなければなりません。 –