Настенка
Настенка

Почему отправка ajax происходит после прохода всего цикла?

Почему отправка ajax происходит после прохода цикла до конца? Что меняет значение n. Хотя операция по отправке через ajax стоит под условием if. Например: if срабатывает когда n=1, а ajax отправляет когда n=3(конец цикла do while).
$("form").on("change", function(event){
var n=0;
var name_group;
var name_name;
var name_number;
do{
n++;
alert("цикл"+" "+n);
name_group = "add_group" + n;
name_name = "add_name" + n;
name_number = "add_number" + n;
if(event.target.name == name_group){
var chng_group = $("select[name='" + name_group + "'] option:selected").text();
$.getJSON("GETname.php", {group: chng_group}, function(data){
$("select[name='add_name" + n + "']").empty();
$("select[name='add_name" + n + "']").prepend("Выберите наименование");
$("select[name='add_number" + n + "']").empty();
$("select[name='add_number" + n + "']").prepend("Выберите номер");
$.each(data, function(index){
$("select[name='" + name_name + "']").append("" + data[index]['name'] + "");
});
});
}
else if(event.target.name == name_name){
var chng_name = $("select[name = '" + name_name + "'] option:selected").text();
$.getJSON("GETnumber.php", {name: chng_name}, function(data){
$("select[name='add_number" + n + "']").empty();
$("select[name='add_number" + n + "']").prepend("Выберите номер");
$.each(data, function(index){
$("select[name='" + name_number + "']").append("" + data[index]['number'] + "");
});
});
}

}while(n < count);
});

ММ
Мария Москвичева

Потому, что function(data) {...} в getJSON срабатывает ПОСЛЕ того, как сервер вернул ответ. А к этому времени значение n УЖЕ равно 3.

Просто оберни $.getJSON в замыкание:

(function(n) {
$.getJSON("GETname.php", {group: chng_group}, function(data){
$("select[name='add_name" + n + "']").empty();
$("select[name='add_name" + n + "']").prepend("Выберите наименование");
$("select[name='add_number" + n + "']").empty();
$("select[name='add_number" + n + "']").prepend("Выберите номер");
$.each(data, function(index){
$("select[name='add_name" + n + "']").append("" + data[index]['name'] + "");
});
});
})(n);

Похожие вопросы
Какой недостаток отправки (е-майла) формы через AJAX ?
Простецкий вопрос по AJAX - функция коллбэка
Как обновить содержимое элемента? (AJAX JQuery)
Ajax как подгрузить контент без перезагрузки?
Как отловить предупреждение браузера для $.ajax()?
Ajax. jQuery. Передать все значения табицы БД из PHP в JS и вывести их на экран. PHP 7.3
Зачем нужен ASP.NET 2.0 AjAX?
Есть проблема с AJAX (JQuery)
Запросы ajax, передача данных в файл.
Не обрабатывается запрос при отправке данных в AJAX