Ajax-Crawling : променяне на "hash"

vik96

Registered
Здравей.
Имам малък въпрос отностно ajax-crawling.
Намерих демо как се ползва ( http://www.gingerhost.com/ajax-demo/ ( работи си идеално ) обаче как да направа така,че като се промени hash-a :
http://www.gingerhost.com/ajax-demo/#!dog на http://www.gingerhost.com/ajax-demo/#!cat ,да се променя и резултата.Имам предвид ако директно заредим: http://www.gingerhost.com/ajax-demo/#!dog ,ajax-a зарежда информацията за dog ,обаче ,ако след това променим #!dog на #!cat примерно не става нищо.
 
По-добре разгледай новото History API на HTML5 и използвай остарелия метод с хешове само за стари браузъри, ако ги поддържаш.

А по темата, искаш когато ръчно се смени хеша да се променя и съдържанието, така ли?
Ако е така, решението е лесно. При зареждане задаваш функция да се изпълнява през определен интервал със setInterval. Във функцията проверяваш ако хеша е сменен, изваждаш информацията за новия, ако не - не правиш нищо :)

Ето пример:
[js]var curHash = window.location.hash;
window.setInterval(function() {
if (curHash !== window.location.hash) {
curHash = window.location.hash;
alert('Има промяна: '+window.location.hash);
};
}, 100);[/js]
 
F1r3Fl3x каза:
По-добре разгледай новото History API на HTML5 и използвай остарелия метод с хешове само за стари браузъри, ако ги поддържаш.

А по темата, искаш когато ръчно се смени хеша да се променя и съдържанието, така ли?
Ако е така, решението е лесно. При зареждане задаваш функция да се изпълнява през определен интервал със setInterval. Във функцията проверяваш ако хеша е сменен, изваждаш информацията за новия, ако не - не правиш нищо :)
Не е ли по-добре да си направи страниците index.php ,cat.php,dog.php и при наличие на js да си ги load-ва с jQuery?
 
При смяната на хеша нямаш презареждане на страницата за това се получава и твоя проблем.
 
lam3r4370 каза:
F1r3Fl3x каза:
По-добре разгледай новото History API на HTML5 и използвай остарелия метод с хешове само за стари браузъри, ако ги поддържаш.

А по темата, искаш когато ръчно се смени хеша да се променя и съдържанието, така ли?
Ако е така, решението е лесно. При зареждане задаваш функция да се изпълнява през определен интервал със setInterval. Във функцията проверяваш ако хеша е сменен, изваждаш информацията за новия, ако не - не правиш нищо :)
Не е ли по-добре да си направи страниците index.php ,cat.php,dog.php и при наличие на js да си ги load-ва с jQuery?
Той това и прави. Въпросът беше как да направи така, че като е отворил /#!dog и му е заредила картинката на кучето, като собственоръчно промени адреса на /#!cat и удари ентър, да му изведе снимката на котката.
 
hpstuff каза:
Все си мисля че сигурно има по елегантен начин от setInterval.
И аз така мисля :?:
Може да се направи по следния начин:
На някаква index.php(html) страница се слага
<script type="text/javascript">
window.location.href='site.com/stranica_s_ajax.php';
</script>
и ще препраща към страница с AJAX
и
<meta http-equiv="refresh"
content="0;url=site.com/stranica_bez_ajax.php" />
-това ще рефрешне към страница ,в която не се използва ajax
Естествено вместо две различни url-а може да се направи към една страница с get параметър "stranica.php?js=ok/false"
и оттам-
$onoroff = $_GET['js'];
if($onoroff == 'on') {
$adres = "#!"
}
else {
$adres2 = ".php"
}
и оттам на навигацията се слага:
<p id="navigation">
<?php echo '<a href="http://www.gingerhost.com/ajax-demo/'.$adres.'dog'.$adres2.'">Dog</a>' ?>
</p>
 
hpstuff каза:
Все си мисля че сигурно има по елегантен начин от setInterval.
Разбира се че има - onhashchange евент-а може да се използва, но ако той се поддържа, ако не се лъжа ще се поддържа и HTML5 History API, а тогава хашовете стават излишни...
http://benalman.com/projects/jquery-hashchange-plugin/
Виж тук как е направен fallback-а при липса на hashchange event :)
 
lam3r4370, целта на този вид навигация не е само да се направи информацията достъпна до търсачките. Ползването на Forward/Back бутоните е минус при ajax апликации. Също така някой, който е отворил ajax страницата не може да даде точен линк до определена информация.

F1r3Fl3x - плъгинът на jquery също ползва този подход. Браузъри, които не поддържат onhashchange събитието няма как по друг начин да го засекат.

pushState може да ви се стори интересен компонент. Поддържа се от Chrome и новите версии на Firefox, Opera, Safari. Само IE не са го въвели още (дори в 10та версия), но и това предстои - благинката е част от HTML5 стандарта.

С малко усилия може да се направи комбинация между двата метода. Там, където е възможно да се ползва pushState, а в останалите случаи (IE и стари версии на браузърите) - обсъдените по-горе методи.
 
Това може да ви се стори интересно: http://codecanyon.net/item/smartajax-smart-powerful-and-easy-to-setup-ajax/406189
Има pushstate/replacestate, hash за старите браузъри и IE, history поддръжка, автоматично праща форми с ajax, ако няма js сайта работи нормално и има камара опции.
 
При по-стари браузъри може би ако хващаш, кога е натиснат ENTER и след това проверяваш за нов HASH, ще стане номера и ще ти е по-леко приложението :]
 
I_V_O каза:
При по-стари браузъри може би ако хващаш, кога е натиснат ENTER и след това проверяваш за нов HASH, ще стане номера и ще ти е по-леко приложението :]
За съжаление адрес бара не е част от документа и не може да се прихване такова събитие. Освен това адрес бара има и "Go" бутон при повечето браузъри, който вече не е възможно да се улови.

Зак Летерман дава едно решение как да се улови onhashchange без setInterval, но то не е напълно приложимо за hash навигация.
 

Back
Горе