За последние 24 часа нас посетили 39593 программиста и 1284 робота. Сейчас ищут 1206 программистов ...

AJAX и кнопки браузера вперед / назад

Тема в разделе "JavaScript и AJAX", создана пользователем Freakmeister, 7 окт 2011.

  1. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Делаю фильтрацию табличных данных на странице через 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 и т.д. И если потом потыкать на кнопку "назад" в браузере, то тебя не пошлёт сразу на предыдущую страницу, а адресная строка начнёт менять хэш на предыдущие значения. Но вот на какое событие можно прописать обработку этого хэша, чтобы страница переаджаксивалась - большая такая загадка... Я так понимаю, способа отследить событие "вперёд/назад" нету? И событие изменения адресной строки тоже? Вот кроме как повесить всё на таймер пока идей нет. =\
     
  2. caballero

    caballero Активный пользователь

    С нами с:
    23 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Еще одна жертва моды на аякс - сочуствую.

    Никто в здравом уме не вешает на аякс бизнес-логику.
    обновить капчу там, проверить корректность логина - это на аяксе можно но никак не изменение и обновлеие данных на странице.
     
  3. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ну смотри , гугл не даёт ответа на вопрос по отслеживанию кликов по кнопкам , потому занимаемся химией

    в js делаем любой var = 0, в онклик каждой ссылки кладём скрипт на var = 1 , в конец загрузки страницы по хешу кладём присвоение var = 0 , в начало загрузки страницы по хешу кладём проверку : если var = 0 - кричим php-обработчику чтобы вернул нам $_SERVER['HTTP_REFERER'] и на него редирект. таким образом var обозначает нажимали ли на ссылку или нет , если не нажимали , то юзер пытается вернуться вручную.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Может забыл повесить обработчик якорей? Если с чистого листа открыть в браузере http://.../#price, сразу сам загрузится прайс?
     
  5. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    хм , а вообще тьху , я кажись не правильно понял

    автор , на онлоаде лови location.hash , пихай в var , стравнивай по таймеру location.hash с var , если отличаются - обновляй данные , обновляй var , сравнивай заново

    з.ы. ну чё , зато придумал как ловить переход "назад" через навигацию браузера =D
     
  6. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Да, сразу загрузится прайс. Обработчик якорей есть, но он срабатывает только один раз - при загрузке страницы. Соответственно, если тыкать вперёд\назад, то этот обработчик не срабатывает и вообще при этом никаких скриптов не выполняется, просто меняется адресная строка. Короче, кроме как "слушать" изменения в строке по таймеру, вариантов нет?

    Нет никакой бизнес-логики. Всё что здесь приведено - есть упрощённая форма реального кода, исключительно для примера, дабы не парить вам мозги лишними подробностями. И делается это всё пока с единственной целью - научиться делать.
     
  7. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    насколько лично мне известно - других нет. ну можете порыть исходники вконтакте, альбомы там таким же образом реализованы, может чтото новое нароете. вообще не ясно чем вас обычный метод не устраивает ?
     
  8. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Таймеры заметно бьют по производительности, поэтому хотел обойтись без них. Но раз по другому никак, что ж тут поделаешь...
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    На фейсбуке высота фрейма, в котором находится приложение (типа если вдруг приложение изменило размеры при каком-то событии) - вычисляется примерно раз в секунду (вообще, сам можешь интервал поставить) по таймеру :) Ничего, вроде не шибко тормозит.
     
  10. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Да, сразу загрузится прайс. Обработчик якорей есть, но он срабатывает только один раз - при загрузке страницы. Соответственно, если тыкать вперёд\назад, то этот обработчик не срабатывает и вообще при этом никаких скриптов не выполняется, просто меняется адресная строка. Короче, кроме как "слушать" изменения в строке по таймеру, вариантов нет?

    Есть.
    http://benalman.com/projects/jquery-hashchange-plugin/


    В современных браузерах есть метод onchangehash

    В плагине, который приведен выше, используется onchangehash, а для старых браузеров таймер
     
  11. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Афигенно. Это то что надо! Я теперь стряпаю простые ссылки средствами php, которые меняют хэш, а этот плагин его ловит при изменении. И никаких тебе onClick не надо, и никакого парсинга в JS для изменения хэша.