16:40 

Выбор из списка без повторов

Всем доброго времени суток!

Скорее теоретический вопрос(возможно ли и куда копать):
Только на html+css+js реализовать отображение страниц из заранее известного списка(01.html 02.html 03.html и так до 50.html) по действию(нажатие кнопки) в произвольном порядке и так чтобы они не повторялись пока весь список не завершится?

Или здесь нужно уже подключать работу с файловой системой(perl/php/mysql)?

@темы: JavaScript, HTML, CSS

Комментарии
2014-08-29 в 16:51 

Скептичный циник
Миру - мир. А Вам - пломбир!
Можно решить с помощью html+js огромным количеством разных способов.
Вы бы уточнили задачу зачем? Тогда и подходящее решение можно будет подобрать.

## Как один из вариантов
Если к этим файлам есть прямой доступ (например, по ссылке типа example.com/42.html), то делается это с помощью AJAX:
1. Открываем главную страницу (например, index.html)
2. При каком-нибудь нужном действии (клике по ссылке, например) с помощью AJAX отправляем get-запрос на example.com/42.html
3. Получаем результат в виде html страницы и пихаем его в какой-нибудь нужный блок.
Чтобы получить много страниц сразу достаточно пройтись циклом по списку (заранее известных ссылок) и повторить для каждой ссылки списка п.2.
Произвольный порядок достигается путём случайного перемешения массива ссылок.

2014-08-29 в 17:19 

alhames
alhames.ru
Или здесь нужно уже подключать работу с файловой системой(perl/php/mysql)?
perl/php/mysql и т.п. нужно если у вас содержание этих страничек генерируется динамически. А если это статические файлы, доступные по http-запросу, то как и сказал Скептичный циник все можно грузить AJAX'ом

2014-08-29 в 19:35 

Kakou ECTb
After silence that which comes nearest to expressing the inexpressible is music.
В общем, я как понимаю, тест пишите?:))

Да, можно, на всех страницах подключаете js файл, в котором :

1) есть массив mas индексами страниц ([0,1,2,3,4,5,6]) и так далее. (из него нужно исключить кодом все числа, равные параметру ?visited - об этом дальше)
2) из URL вытаскиваете параметр ?visited например - в нём уже будут все ID странц, которые уже открывались
3) генерируете рандную выборку из массива mas одного числа (по рандомному индексу) - как, можно погуглить.
4) когда у вас есть рандомное число - на кнопку вешаете обработчик события клика, в котором делаете просто редирект на следующую страницу вида window.location = "/"+randomNumber+".htm?visited="+ (тут добавляете через запятую допустим все id которые уже были выбраны);

Всё. Каждая следующая страница будет случайной без повторений.

Этот же подход сработает и через ajax, но это если вы знаете что это такое и как его употреблять, но это тоже довольно несложно.

Будут вопросы, пишите в скайп : Nigrimmist ;)

2014-08-30 в 02:32 

Огроменное спасибо всем за советы!
Дело действительно с тестом :) Нажимаем кнопку "далее" и выводится следующий произвольный билет, но он уже не повторится пока не пройдут все.

Странички находятся не удалённо, но за идею с AJAX-ом спасибо! Взял на заметку.

И нет, странички не генерируются динамически ;) я только начинающий(всё никак не взяться серъёзно :) ) так что это ещё в будущем

А вот идея с массивами кажись самая удачная! :
- при начале теста создаётся массив и заполняется номерами билетов(идентификаторов) в произвольном порядке
- при считывании они уже и так читаются в произвольном порядке и каждый прочитанный элемент массива просто удаляется(и так до тех пор пока вопросы не закончатся)

Смущает только "время жизни" массива - не пропадёт ли он после перехода со страницы на страницу?

2014-08-30 в 02:46 

Скептичный циник
Миру - мир. А Вам - пломбир!
Хм. Если это настолько простой тест, что меняется только текст/вопросы/ответы и защита от слома не требуется, то можно и простой одностраничник сделать – трафика меньше, вся логика в одном месте, никаких запросов вообще.

Сначала создать объект вопросов-ответов:


При клике на кнопку ответа и перехода к следующему вопросу, записывать в объект ответа флаг challenge с ответом пользователя. После чего брать случайный элемент из этого массива с отсутствующим этим флагом.
Или иметь второй массив с отвеченными данными и "перекидывать" вопрос при ответе из одного в другой пока первый не опустеет.
Проверять можно, например, на завершение инкрементом и длиной этого массива данных.

Опять же, вариантов решения этой задачи десятки (:

> Смущает только "время жизни" массива - не пропадёт ли он после перехода со страницы на страницу?
При переходе между страницами все js-объекты стираются если их не сохранять каким-либо образом. А уж этих способов вагон и тележка: выбор зависит от того что хранить и в каком объёме.
Небольшие вещи удобно хранить в localStorage, например.

     

@web-программирование

главная