В течение 3 дней я пытаюсь найти способ использования отложенных методов JQuery в моем коде, но, к сожалению, я никогда не нахожу решение.JQuery отложенные запросы ajax из каждой петли
У меня есть 2 функции. Первый init_items
отправляет первый запрос ajax, чтобы получить список элементов, а затем цикл использует имя этих элементов для отправки других запросов для получения сведений о деталях руды. Итак, в этом случае я хотел бы, чтобы при первом запросе выполняли следующие запросы.
Во второй функции, вызванной щелчком мыши, я бы хотел, чтобы система дождалась завершения первого завершения (все выполненные запросы) до получения данных.
function init_items(id) {
$.when(
$.ajax({
async: false,
data: { type : type, name : domain },
type: 'GET',
url: 'select_items.php'
}).done(function (data) {
var promises=[];
$.each(JSON.parse(data), function(k,v) {
var code = v.code;
getCurrentItem(code);
var req = $.get("get_groups.php", { id: id }).done(function(data1) {
res = JSON.parse(data1);
global_news[domain] = res;
promises.push(req);
});
return $.when.apply(null, promises).done(function(){
console.log('done 1');
});
});
}
$("button[name='refresh_value']").on("click", function() {
var id = $("select[name='id']").val();
$.when(init_items(id)).done(function(n){
console.log(n.num);
console.log('all set');
});
});
В настоящее время по нажатию на кнопку, функция init_items
запуски, но не ждать результата для отображения информации.
Я прочитал много случаев aboud, отложенных, обещаний, когда, но я не решу эту проблему.
Есть ли у кого-то идеи? Я бы очень признателен вам за вашу помощь.
Бест,
Sam
a) вы должны использовать 'then' вместо' done' для цепочки. Избегайте «делать», где бы вы ни находились. б) ваши фигурные скобки не соответствуют вашему отступу. Кажется, вы пытались поступать правильно, но код, который вы написали, не делает этого. Не имеет никакого смысла, как/где обратный вызов внутреннего 'done' заканчивается. – Bergi
'domain' представляется константой и' getCurrentItem (code) 'kinda floats в nomansland. –