Тема: ajax в цикле
Показать сообщение отдельно
  #10 (permalink)  
Старый 25.03.2015, 18:01
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

/**
 * Структурируйте ваши данные чтобы вам проще было с ними работать
 */
var data = {
    name: "Item1",
    content: [
        {
            name: "Item2.1",
            content: [
                {
                    name: "Item3.1",
                    content: []
                },
                {
                    name: "Item3.2",
                    content: []
                }
            ]
        },
        {
            name: "Item2.2",
            content: []
        },
        {
            name: "Item2.3",
            content: []
        }
    ]
};

/**
 * Превращаем наш структурированный объект любой глубины в массив данных для запроса
 * @type {Array}
 */
var toRequest = [];
var getDataToRequest = function (data) {
    toRequest.push(data.name);
    if (data.content) {
        data.content.forEach(getDataToRequest);
    }
};
getDataToRequest(data);

/**
 * Это эмуляция аякса (Время запроса от 1 до 2 секунд)
 * @type {{get: Function}}
 */
var $ = {
    get: function (data, success) {
        function getRandomInt(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        setTimeout(function () {success(data)}, getRandomInt(1000, 2000));
    }
};

/**
 * Запрашиваем данные из массива по очереди начиная с 1 элемента массива
 * @param arr
 */
var request = function (arr) {
    $.get(arr.shift(), function (data) {
        console.log(data + " loaded!");
        if (arr.length) {
            request(arr);
        } else {
            alert("Все загружено!");
        }
    });
};
request(toRequest);
Ответить с цитированием