#javascript #jquery #ajax #promise #jquery-deferred
#javascript #jquery #ajax #обещание #jquery-отложенный
Вопрос:
Я должен показать данные для нескольких клиентов. К сожалению, процесс загрузки для группы клиентов происходит очень медленно. Тогда я решил загружать один за другим и как можно скорее, другими словами, когда страница отображается в первый раз. Вот текущий код:
$(document).ready( function () {
// here, clients = [{'client': 1, 'loaded': false}, {'client': 2, 'loaded': false}, ...]
$.each(clients, function(index, value){
if (!value.loaded){
$.ajax({ url: 'loadclient',
data: {client: value.client},
dataType:'json',
success: function (response) {
value.loaded = true;
}
});
};
});
});
Пока клиенты загружаются, я хочу отобразить представление загруженных клиентов. Затем у меня есть выпадающий список, в котором пользователи могут выбрать, какой клиент получить. Дело в том, что я хочу показать данные, если загружен выбранный клиент, ИЛИ подождать, пока клиент, наконец, загрузится, а затем покажет данные. Когда пользователь выбирает клиента, у меня есть несколько вызовов ajax для построения представления. Вот пример одного из них:
function get_SFN(){
$.ajax({url: 'update_sfn',
data: {client: client},
dataType:'json',
success: function (response) {
var risks = response.risks;
var values = response.values;
buildGraphSFN(risks, values) ;
}
});
};
Когда пользователь выбирает клиента, мне нужно проверить, загружен ли он. Если оно не загружено, я хочу дождаться, пока это условие будет выполнено, а затем запустить второй ajax.
Как я могу это исправить?
Комментарии:
1. НЕ делайте http-запросы в цикле.
2. У вас есть предложения о том, как с этим справиться?