#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. Гораздо лучше объединить все данные в один запрос. Затем вы можете распределить ответ между всеми соответствующими элементами пользовательского интерфейса. Это связано как с производительностью, так и с масштабируемостью.