Последовательный вызов AJAX внутри цикла с использованием jQuery.Deferred()

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

У меня цикл, внутри цикла есть вызов AJAX. Для каждого цикла AJAX возвращает значение. Я хочу, чтобы последовательный цикл один за другим выполнялся только после завершения запроса AJAX. Я сделал это с помощью async:false , но этот метод зависает мой другой код.

Я хочу сделать с $.Deferred()

Это мой код:

 function CheckAvailability(Display) {
    var Status = "";

    $.ajax({
        type: "POST",
        url: "myurl",
        dataType: "json",
        data: { "Display": Display },
        async: false,
        success: function (result) {
            Status = result[0].Availability;
        }
    });

    return Status;
}

$(DisplayData).each(function (index, Display) {
    var Availability = CheckAvailability(Display) === 'Yes' ? '' : '<span style="margin-left:10px"><i class="fa fa-exclamation text-danger"></i></span>';
    var Name = Display.Name   Availability;

    console.debug(Name);
});
  

Я хочу выводить как:

 Display1 Yes
Display2 No
Display3 No
Display4 Yes
  

Комментарии:

1. Просто примечание: если вам нужно использовать async:false при выполнении вызовов AJAX, очень вероятно, что вы делаете что-то неправильно.

2. Гораздо лучше объединить все данные в один запрос. Затем вы можете распределить ответ между всеми соответствующими элементами пользовательского интерфейса. Это связано как с производительностью, так и с масштабируемостью.