В этом фрагменте кода, похоже, есть несколько странных вещей.
Прежде всего, $ .getJSON (...) принимает третий параметр, который является вашим обратным вызовом. Второй параметр - это данные. Я думаю, что вы передаете функцию в качестве параметра данных. Вам нужно будет исправить это в обоих местах. Если вам ничего не нужно передавать, просто укажите второй параметр как пустой объект {}.
Вот один из основных способов выполнения обратного вызова после того, как ВСЕ ваши XMLHttpRequest возвращаются с сервера.
this.callReturned = function(data) {
var countdown = data.groups.length;
function callback() {
if(countdown-- === 1) {
PopulateGroups();
}
}
for(var i=0; i< data.groups.length; i++)
{
insparq.Groups[i] = data.groups[i];
$.getJSON(participant_url, { /* data to send to server */ }, callback);
}
}
В этом фрагменте функция обратного вызова выполняется каждый раз, когда вы получаете запрос XMLHttpRequest с сервера. Последний выполняет PopulateGroups () после обратного отсчета до 1 из data.groups.length.