Показать сообщение отдельно
  #1 (permalink)  
Старый 29.09.2016, 20:10
Аспирант
Отправить личное сообщение для Sherminator Посмотреть профиль Найти все сообщения от Sherminator
 
Регистрация: 01.08.2012
Сообщений: 50

Вложенные Ajax запросы
Всем доброго времени суток!

Как известно, применение синхронных запросов нежелательно. Но вот что делать, если информацию нужно получить "вложенно". То есть для того, чтобы выдать инфу, нужно сделать последовательные запросы к серверу.

Например (хардкор конечно, но):
var user = {
    country: 1,
    region: 2,
    city: 5
};

Запрос А = запрашиваем пользователя, получаем айди страны, региона, города
Запрос В = запрашиваем страну по айди, получаем айди областей
Запрос С = запрашиваем область по айди, получаем айди городов
Запрос D = запрашиваем город по айди, и получаем наконец название города...

Т.к. используем AJAX (А), то запросы посылаются синхронно с проходом компилятора (К), но К не дожидается пока А вернет что-то. В итоге код вида
var Adress = function(countryId, regionId, cityId){
    var adr = {};
    var gCr = AJAX.getCountries();
    adr.country = gCr[countryId].name;
    var gRg = AJAX.getRegionInCountry(countryId);
    adr.region = gRg[regionId].name;
    var gCt = AJAX.getCityInRegion(regionId);
    adr.city = gCt[cityId].name;
    return adr;
};

var U_adress = new Adress(user.country, user.region, user.city);
var string = "Пользователь проживает по адресу" +  U_adress.country + U_adress.region + U_adress.city;

вообще неуместен, т.к на выходе по понятным причинам получим Польз. пр. по адресу undefined undefined undefined.

При использовании колбеков, которые как раз таки применяются для такого
AJAX.getCountries(function () {
    ///...
    var gRg = AJAX.getRegionInCountry(countryId, function () {
        ///...
        var gCt = AJAX.getCityInRegion(regionId, function () {
            ///...
        })
    })
});

не получается вернуть результат в родительскую ф-цию, не знаю даже почему, наверно, коллбек просто завершает себя в никуда. В итоге на выходе снова получаем Польз. пр. по адресу undefined undefined undefined

Вопрос, уважаемые знатоки: Как заставить этот AJAX сделать вложенные (последовательныe) запросы, когда для одного запроса нужно сделать сначала другой, а для другого сначала третий и т.д ?
Ответить с цитированием