(非同期呼び出しの外で)完全に明確に定義されている配列では問題がありますが、インデックスをasynchリクエスト(例えば$ .getJSON)内で呼び出すと、配列の添字は未定義ですが、の長さはです。ここに私のコードです。非同期リクエスト後の配列内の未定義インデックス
私が参照しています配列があるfriendsArray
配列は、第二の「$ .getJSON」通話中に正しいインデックスを持っていますが、その関数のコールバック内のすべてのインデックスが不定となります。メソッドのスコープ内で定義されているので、配列はその値を保持するべきではありませんか?
if (response.status === 'connected') {
var accessToken = $.trim(response.authResponse.accessToken);
var hashArray = [];
var friendArray = [];
document.getElementById("statusCheck").innerHTML = accessToken;
$.getJSON('https://graph.facebook.com/me/friends?access_token=' + accessToken,
function(dataJSON){
hashArray = dataJSON['data'];
for (var i = 0; i < hashArray.length; i++){
friendArray.push(hashArray[i]["id"]);
}
var resultJSON = "{";
var resultArray = [];
for (var i = 0; i < friendArray.length; i++){
$.getJSON('https://graph.facebook.com/me/mutualfriends/' +
friendArray[i] + "?access_token=" + accessToken,
function(dataJSON2){
resultArray = dataJSON2['data'];
resultJSON += friendArray[i] + ":" + resultArray.length + ",";
//alert(resultJSON);
})
if (i == friendArray.length - 1){
postArrayPopulation(resultJSON);
}
}
});
}
うわー、それは単に天才でした。私はそれを考えなかっただろう。 – Vivek
だから、私は通常のコールバックの代わりにそのクロージャコードを置き換えて、それはうまくいくでしょうか?私は、特にコールバックと組み合わせて使用する場合、クロージャの周りを頭でつかむのに苦労しています。 – Vivek
@Vivek - http://jsfiddle.net/jfriend00/BGkZh/で見て遊ぶ例です。私は私の答えにも説明を加えました。 – jfriend00