Делаю фильтрацию табличных данных на странице через AJAX. Столкнулся с двумя проблемами: 1. Невозможность обмениваться ссылками на уже отфильтрованную таблицу (уже решил - жми). 2. Кнопки браузера вперёд / назад работают некорректно. Есть ещё третья проблема, связанная с SEO, но сначала хотелось бы разобраться со второй... Собссна, пол-дела я уже сделал - когда пользователь кликает на определённый заголовок столбца, чтобы отфильтровать по нему таблицу, в JS происходит следующее: [js]var $m = $(this).attr("id"); document.location.hash = $m.slice(2);[/js] Тоесть, в хэше адресной строки появляется id столбца, по которому юзер кликнул (минус префикс из двух букв). Типа: http://www.php.ru/forum/posting.php?mode=newtopic&f=16#price Что это даёт. Если пофильтровать таблицу по разным колонкам, то адресная строка будет меняться - тоесть, меняться будет хэш - #price, #product, #tag и т.д. И если потом потыкать на кнопку "назад" в браузере, то тебя не пошлёт сразу на предыдущую страницу, а адресная строка начнёт менять хэш на предыдущие значения. Но вот на какое событие можно прописать обработку этого хэша, чтобы страница переаджаксивалась - большая такая загадка... Я так понимаю, способа отследить событие "вперёд/назад" нету? И событие изменения адресной строки тоже? Вот кроме как повесить всё на таймер пока идей нет. =\
Еще одна жертва моды на аякс - сочуствую. Никто в здравом уме не вешает на аякс бизнес-логику. обновить капчу там, проверить корректность логина - это на аяксе можно но никак не изменение и обновлеие данных на странице.
ну смотри , гугл не даёт ответа на вопрос по отслеживанию кликов по кнопкам , потому занимаемся химией в js делаем любой var = 0, в онклик каждой ссылки кладём скрипт на var = 1 , в конец загрузки страницы по хешу кладём присвоение var = 0 , в начало загрузки страницы по хешу кладём проверку : если var = 0 - кричим php-обработчику чтобы вернул нам $_SERVER['HTTP_REFERER'] и на него редирект. таким образом var обозначает нажимали ли на ссылку или нет , если не нажимали , то юзер пытается вернуться вручную.
Может забыл повесить обработчик якорей? Если с чистого листа открыть в браузере http://.../#price, сразу сам загрузится прайс?
хм , а вообще тьху , я кажись не правильно понял автор , на онлоаде лови location.hash , пихай в var , стравнивай по таймеру location.hash с var , если отличаются - обновляй данные , обновляй var , сравнивай заново з.ы. ну чё , зато придумал как ловить переход "назад" через навигацию браузера =D
Да, сразу загрузится прайс. Обработчик якорей есть, но он срабатывает только один раз - при загрузке страницы. Соответственно, если тыкать вперёд\назад, то этот обработчик не срабатывает и вообще при этом никаких скриптов не выполняется, просто меняется адресная строка. Короче, кроме как "слушать" изменения в строке по таймеру, вариантов нет? Нет никакой бизнес-логики. Всё что здесь приведено - есть упрощённая форма реального кода, исключительно для примера, дабы не парить вам мозги лишними подробностями. И делается это всё пока с единственной целью - научиться делать.
насколько лично мне известно - других нет. ну можете порыть исходники вконтакте, альбомы там таким же образом реализованы, может чтото новое нароете. вообще не ясно чем вас обычный метод не устраивает ?
Таймеры заметно бьют по производительности, поэтому хотел обойтись без них. Но раз по другому никак, что ж тут поделаешь...
На фейсбуке высота фрейма, в котором находится приложение (типа если вдруг приложение изменило размеры при каком-то событии) - вычисляется примерно раз в секунду (вообще, сам можешь интервал поставить) по таймеру Ничего, вроде не шибко тормозит.
Да, сразу загрузится прайс. Обработчик якорей есть, но он срабатывает только один раз - при загрузке страницы. Соответственно, если тыкать вперёд\назад, то этот обработчик не срабатывает и вообще при этом никаких скриптов не выполняется, просто меняется адресная строка. Короче, кроме как "слушать" изменения в строке по таймеру, вариантов нет? Есть. http://benalman.com/projects/jquery-hashchange-plugin/ В современных браузерах есть метод onchangehash В плагине, который приведен выше, используется onchangehash, а для старых браузеров таймер
Афигенно. Это то что надо! Я теперь стряпаю простые ссылки средствами php, которые меняют хэш, а этот плагин его ловит при изменении. И никаких тебе onClick не надо, и никакого парсинга в JS для изменения хэша.