Вы можете заключить вызов AJAX в новое замыкание, чтобы сохранить переменную i
, и использовать индексную сигнатуру сеттера вашего массива.
var arr = [];
for (var i=0; i<x; i++){
//does stuff
(function(index) {
$.getJSON(link, function(data){
// does stuff
arr[index] = data;
}
})(i);
}
Обратите внимание, что если вы используете EcmaScript 6, вы можете использовать ключевое слово let
в цикле for
, чтобы иметь вид переменной local i
, так что вы не не нужно закрытие.
Хотя это решение технически решает вашу проблему, гораздо элегантнее и лучше использовать базовые обещания, как вы можете видеть в ответе @ Квентина .
Обратите внимание, что я не тестировал этот код, он может содержать ошибки, и он только для демонстрационных целей.