Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перейти на страницу с аякс-контентом по кнопке назад (https://javascript.ru/forum/misc/61367-perejjti-na-stranicu-s-ayaks-kontentom-po-knopke-nazad.html)

meAndreas 15.02.2016 12:25

Перейти на страницу с аякс-контентом по кнопке назад
 
Помогите разобраться с тем что происходит. Есть страница, на которой данные подгружаются аяксом по переходам на страницы
Код:

_________________________________________
[              1 2 3 4 5         
[          _____________________     
[          [                    ]   
[          [      аякс          ]   
[          [                    ]     
[          ---------------------   
_________________________________________

Данные подружаются по изменению хэша. Т.е. ссылки при переходе по страницам такие mysite.com/#1, mysite.com/#2, ...

первая страница по ссылке mysite.com (т.е. которая соответствует #1) загружается
полностью (без аякса), а все остальные с подгрузкой внутренней части

я остлеживаю событие onhashchange и по кликам на ссылках страниц в функции подгружаю по номерам хешей внутренний блок.

проблема возникает, когда я перехожу например со страницы mysite.com/#10 на страницу mysite.com/help.html и потом нажимаю кнопку назад в браузере.

После того как кнопка назад нажата, браузер показывает правильный url: mysite.com/#10, но во внутреннем блоке данные со страницы mysite.com, т.е. с первой страницы - она из кеша чтоли загружается?

как вернуться по кнопке назад на страницу #10 с правильным содержимым блока аякса?

при этом событие onhashchange не срабатывает (проверял в консоли) и поэтому не загружается внутренний блок для страницы 10

как это решить?

destus 15.02.2016 12:28

Что мешает обрабатывать событие DOMContentLoaded или onload?

meAndreas 15.02.2016 12:39

Цитата:

Сообщение от destus (Сообщение 407849)
Что мешает обрабатывать событие DOMContentLoaded или onload?

я так понимаю, что onload это когда все что на странице подгрузилось - как это поможет решить проблему? по-моему никак.

теперь, DOMContentLoaded– браузер полностью загрузил HTML, и построил DOM-дерево. т.е. по этому событию я смогу получить номер хэша и вызвать page #10 ?

destus 15.02.2016 12:51

Цитата:

Сообщение от meAndreas (Сообщение 407851)
я так понимаю, что onload это когда все что на странице подгрузилось - как это поможет решить проблему? по-моему никак.

теперь, DOMContentLoaded– браузер полностью загрузил HTML, и построил DOM-дерево. т.е. по этому событию я смогу получить номер хэша и вызвать page #10 ?

А разве оно не будет срабатывать после нажатия кнопки назад? Напишите alert(location.hash) и посмотрите что будет.

meAndreas 15.02.2016 13:47

я сделал так
document.addEventListener("DOMContentLoaded", ready);
	function ready() {
		console.log( 'DOM ready ' + location.hash );
		$("#CAPTCHA").attr("src","http://captcha.ru/captcha/");
	}

после нажатия кнопки назад - вывод в консоль есть, но после ничего не обновляется
как же делать что либо после того, как сработал DOMContentLoaded?

destus 15.02.2016 14:00

Например

document.addEventListener("DOMContentLoaded", ready);
	function ready() {
		location.hash && window.onhashchange();
	}

meAndreas 15.02.2016 14:18

и что это дает?
мне нужно выполнить из функции ready() действия - например, вывод в консоль проходит, а дальше $("#CAPTCHA").attr("src","http://captcha.ru/captcha/"); не срабатывает. я сейчас говрю про дейсвия которые происходят при нажатии кнопок back - forward

destus 15.02.2016 14:35

В первом сообщении вы спрашивали почему у вас событие onhashchange не срабатывает, вам показали как можно вызывать события искусственным образом. и обрабатывать хэш-параметр.

Почему у вас в какой-то элемент с id CAPTCHA не подгружается url картинки только вам известно. Вы же разметку страницы не даёте.

meAndreas 15.02.2016 14:46

Цитата:

Сообщение от destus (Сообщение 407864)
Почему у вас в какой-то элемент с id CAPTCHA не подгружается url картинки только вам известно.

я это попробовал сделать на странице только для примера
и оно не сработало при нажатии кнопки "назад", возможно это связано с подгрузкой jquery.

допустим, мы выполнили действие из функции ready(),
но ведь оно будет выполняться всегда при условиях:

- пользователь перешл по ссылке с хэшем
- пользователь перешел по истории на ссылку с хэшем

а смысл всего о чем мы гворим - чтобы выполнялось только при надажтии хардварных кнопок, - так возможно?

meAndreas 15.02.2016 14:59

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


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