Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Открывает 1 раз, проблемы с each или for (https://javascript.ru/forum/misc/62378-otkryvaet-1-raz-problemy-s-each-ili.html)

kiberkun 07.04.2016 17:29

Открывает 1 раз, проблемы с each или for
 
Есть массив, в ней есть ссылки, эти ссылки мне нужно открывать каждые 2 секунды по очереди, но он открывает 1 раз. Остальные игнорирует :(

var map = ["/d/416873", "/d/428156", "/d/428156n", "/d/418826", "/d/393995", "/d/339001", "/d/296157", "/d/391953", "/d/414348", "/d/430582", "/d/431087", "/d/417610", "/d/373373", "/d/401604", "/d/152572", "/d/371198", "/d/402680", "/d/363223", "/d/363223n", "/d/347460", "/d/420265", "/d/406025", "/d/406025n", "/d/391823", "/d/428432", "/d/428432n", "/d/375378", "/d/379229", "/d/379229n", "/d/366079", "/d/429454", "/d/371849", "/d/419869", "/d/419869n", "/d/431341", "/d/431341n", "/d/356968", "/d/409898", "/d/413122", "/d/396118", "/d/245186", "/d/417492", "/d/107421", "/d/107421n", "/d/371217", "/d/421936", "/d/421936n", "/d/330216", "/d/414289"];

for (var i = 0; i < map.length; i++) {
	setInterval(function() {
		window.location.href = map[i];
		//console.log(map[i])
	}, 2000)
}

рони 07.04.2016 17:40

kiberkun,
читать медленно вдумчиво страница перезагружается в строке 5 а значит успеет сработать только первый переход, а значит интервал и цикл бесполезны. придумайте иной алгоритм.

kiberkun 07.04.2016 17:46

а сработает, если ссылку открыть в новой вкладке?

kiberkun 07.04.2016 17:51

да, сработало, но он мне все ссылки открывает каждые 2 секунды с новой вкладки. А нужно что бы 1 ссылку и по очереди.

var map = ["/d/416873", "/d/428156", "/d/428156n", "/d/418826", "/d/393995", "/d/339001", "/d/296157", "/d/391953", "/d/414348", "/d/430582", "/d/431087", "/d/417610", "/d/373373", "/d/401604", "/d/152572", "/d/371198", "/d/402680", "/d/363223", "/d/363223n", "/d/347460", "/d/420265", "/d/406025", "/d/406025n", "/d/391823", "/d/428432", "/d/428432n", "/d/375378", "/d/379229", "/d/379229n", "/d/366079", "/d/429454", "/d/371849", "/d/419869", "/d/419869n", "/d/431341", "/d/431341n", "/d/356968", "/d/409898", "/d/413122", "/d/396118", "/d/245186", "/d/417492", "/d/107421", "/d/107421n", "/d/371217", "/d/421936", "/d/421936n", "/d/330216", "/d/414289"];

for (var i = 0; i < map.length; i++) {
	setInterval(function() {
		window.open(map[i], '_blank');
	}, 2000)
}


Что не так делаю?

рони 07.04.2016 18:06

kiberkun,
уберите цикл оставьте только i

kiberkun 07.04.2016 18:34

Не понял! Написал другой вариант:
var map = ["/d/416873", "/d/428156", "/d/428156n", "/d/418826", "/d/393995", "/d/339001", "/d/296157", "/d/391953", "/d/414348", "/d/430582", "/d/431087", "/d/417610", "/d/373373", "/d/401604", "/d/152572", "/d/371198", "/d/402680", "/d/363223", "/d/363223n", "/d/347460", "/d/420265", "/d/406025", "/d/406025n", "/d/391823", "/d/428432", "/d/428432n", "/d/375378", "/d/379229", "/d/379229n", "/d/366079", "/d/429454", "/d/371849", "/d/419869", "/d/419869n", "/d/431341", "/d/431341n", "/d/356968", "/d/409898", "/d/413122", "/d/396118", "/d/245186", "/d/417492", "/d/107421", "/d/107421n", "/d/371217", "/d/421936", "/d/421936n", "/d/330216", "/d/414289"];
var i = 0;

var all = map.length,
    linkDownloadMap = setInterval(function() {
        if (i == all) {
            clearInterval(linkDownloadMap);
        } else {
            i++;
            console.log("Ссылка на карту " + map[i]);
        }
    }, 100);


Только он выдает в конце ошибку undefined :|

рони 07.04.2016 18:56

kiberkun,
строки 9 и 10 поменяйте местами

рони 07.04.2016 18:57

Цитата:

Сообщение от kiberkun
Не понял!

всё вы поняли :)

kiberkun 07.04.2016 21:15

хорошо!
возможно :)

я как задрот osu!mania решил написать себе скрипт для быстрой загрузки карт. Сам скрипт вот:
// Определяем кол-во страниц в каталоге карт
var all_page = $(".pagination:last a:last").prev().text();
// Начальная страница каталога
var start_page = '1';

// В каждом каталоге по 40 карт
// 1 карта за 3 секунды
// Открываем новый каталог после окончания 40*3 = 120 секунд(Всего 2 минуты, дабы не забанили(ошибка 503) ^_^)
function mapLoad() {
    if (start_page == all_page) {
        clearInterval(DownloadMap);
    } else {
        $.ajax({
            type: "GET",
            url: "/p/beatmaplist", // ссылка на каталог карт
            data: {
                l: "1", // рекомендуемая трудность
                r: "4", // ранг статус (все)
                q: "", // название карты (если пустое, то все названия)
                g: "0", // все жанры
                la: "0", // все языки
                ra: "", // а хз что это за параметр :D
                s: "4", // а хз что это за параметр :D
                o: "1", // а хз что это за параметр :D
                m: "3", // мод osu!mania
                page: start_page // страница
            },
            success: function(data) {
                // создаем массив карт
                var map = [],
                    i = 0;

                // ищим карты и вставляем в массив "map"
                $("a.beatmap_download_link:not(.novid)", data).each(function() {
                    var e = $(this).attr("href");
                    map.push(e);
                });

                var all = map.length,
                    linkDownloadMap = setInterval(function() {
                        if (i == all) {
                            clearInterval(linkDownloadMap);
                        } else {
                            // скачиваем файл
                            window.open(map[i], '_blank');
                            i++;
                        }
                    }, 3000);
            }
        });
        start_page++;
    }
}

mapLoad();

var DownloadMap = setInterval(function() {
    mapLoad()
}, 120000);


Возможно дорабатывать буду)


Часовой пояс GMT +3, время: 10:52.