Comments 63
давно пользуюсь этой техникой, автору больше спасибо за подробное описание
Спасибо за статью.
Небольшое замечание: как многократно писали, не стоит пытаться «помочь» указанием чего-то вроде div#pjaxcontainer. Потому как в этом случае сначала выберутся все div-ы, и лишь потом будет выполнен поиск по id. А поиск по id сам по себе гораздо быстрее (самый быстрый из всех поисков по DOM).
Небольшое замечание: как многократно писали, не стоит пытаться «помочь» указанием чего-то вроде div#pjaxcontainer. Потому как в этом случае сначала выберутся все div-ы, и лишь потом будет выполнен поиск по id. А поиск по id сам по себе гораздо быстрее (самый быстрый из всех поисков по DOM).
Ниче не понял а где mp3 плеер? о_О
Зависит от того, что вы хотели спросить. Если вы о сайте, так он в верхнем правом углу должен быть, если о статье — совершенно верно, его там нет!
Если вам интересно, могу отдельную статью посвятить созданию mp3-плеера (или видео-плеера) с плейлистом и дополнительными функциями на основе jPlayer (http://jplayer.org/)
Если вам интересно, могу отдельную статью посвятить созданию mp3-плеера (или видео-плеера) с плейлистом и дополнительными функциями на основе jPlayer (http://jplayer.org/)
Оооо просим-просим, очень интересно у меня с ним долгой дружбы не вышло… особено интересно если рассмотрите варинат мулти-инстанса, когда кучка объектов-плееров jPlayer на одной странице.
Сам видео-ролик на странице-примере — чумовой :)
Я думаю, что нет смысла держать на компьютере с доступом в интернет Firefox версией ниже 4-й. Впрочем, попробуйте зайти на мой сайт — библиотеку мы с imsamurai модифицировали для работы с браузерами, не поддерживающими pushState. Так все должно работать.
Просто, у меня сейчас нету сервера, чтобы выложить там пример. Но я займусь этим
Просто, у меня сейчас нету сервера, чтобы выложить там пример. Но я займусь этим
Речь ни о нас с вами, а о пользователях, которые и IE любят, и обновлются не так шустро как бы нам хотелось. FF 4-ка зарелизилась то не так давно.
Тот пример, что вы смотрите — оригинальная библиотека defunkt'а. А он принципиально отказывается поддерживать не-pushState браузеры. Мы с imsamurai эту поддержку добавили — в виде hash-навигации.
Или скачайте с github последнюю версию — я еще не обновлял исходники сайта.
Просто плеер не имеет отношения к pjax. Он просто помещен вне обновляемой зоны и навигация по сайту никак не затрагивает его работу.
Хм, а как быть с индексированием в поисковиках?
Мне не нравится одна вещь с хеш-навигацией.
Вот пример: кто-то с pjax навигацией дает ссылку кому-то с ие7
amsterdamusic.com.ua/profile/85
Этот кто-то с ие7 заходит по ссылке и его хеш начинает меняться вот так
amsterdamusic.com.ua/profile/85#!/profile/85
Можно сразу редиректить если хеш нужен и его нет с amsterdamusic.com.ua/profile/85 на amsterdamusic.com.ua/#!/profile/85, но тогда такая ссылка будет для поисковика совсем не тем, чем хочется.
Вот пример: кто-то с pjax навигацией дает ссылку кому-то с ие7
amsterdamusic.com.ua/profile/85
Этот кто-то с ие7 заходит по ссылке и его хеш начинает меняться вот так
amsterdamusic.com.ua/profile/85#!/profile/85
Можно сразу редиректить если хеш нужен и его нет с amsterdamusic.com.ua/profile/85 на amsterdamusic.com.ua/#!/profile/85, но тогда такая ссылка будет для поисковика совсем не тем, чем хочется.
Восклицательный знак — специальный сигнал для поисковиков, что этот контент может быть доступен и другими путями. Без него хеш-навигация для поисковика действительно превращается в чёрный ящик.
site.ru/#!hash для поисковиков это site.ru/hash?
Или только для гугла?
Или только для гугла?
Не совсем так.
Используется дополнительный урл для обработки, см спеку и изначатьльную инициативу.
И да, вроде бы пока это только гугл.
Я не использовал этот функционал, только читал.
Используется дополнительный урл для обработки, см спеку и изначатьльную инициативу.
И да, вроде бы пока это только гугл.
Я не использовал этот функционал, только читал.
Не подскажете, а я ерунду не сделал, что слеш ставлю после восклицательного знака? :)
Насколько я этот механизм понимаю — не глупость. Ставить можно что угодно, оно будет передано через _escaped_fragment, см. ссылки которые я запостил выше.
Большое спасибо. Выходит, нужно добавить в контроллере запросов вида /_escaped_fragment_=… и превращать их в /…
Не совсем. Не «превращать их» а отдавать поисковику контент, который увидит юзер, перешедший по аякс-запросу.
Т.е. схема такая:
— поисковик видит ссылку, в которой есть #!
— поисковик идёт по escaped_fragment-урлу и запрашивает страницу (в контектсте: «а что увидит юзер с таким аякс-запросом?»)
— ваш сервер должен выдать ему соответствующий контент (на сколько я понимаю, стоит использовать минимальное html-обрамление)
— поисковик связывает выданный контент с ajax-запросом и может показать его в выдаче
Т.е. схема такая:
— поисковик видит ссылку, в которой есть #!
— поисковик идёт по escaped_fragment-урлу и запрашивает страницу (в контектсте: «а что увидит юзер с таким аякс-запросом?»)
— ваш сервер должен выдать ему соответствующий контент (на сколько я понимаю, стоит использовать минимальное html-обрамление)
— поисковик связывает выданный контент с ajax-запросом и может показать его в выдаче
Вы совершенно правы, сейчас что-нибудь придумаю
Думаю, теперь я разобрался с проблемой — как считаете? К слову, пока ковырял, узнал, сколько ошибок можно поместить в 3 строки :)
При переходе по ссылке amsterdamusic.com.ua/#!/profile/88 я вижу профиль музыканта, а при обновлении страницы уже вижу топ5. Да и вообще находясь на любой странице, после обновления я вижу топ5.
imsamurai (https://github.com/imsamurai) предложил улучшения библиотеки (и я радостью слил изменения): встроенная функция для отправки форм, улучшения работы с хешами и более развитая система триггеров. (у imsamurai, к сожалению, нет аккаунта на хабре — будем рады помощи)
добавьте плиз в README вариант использования в Rails
class ApplicationController < ActionController::Base
layout Proc.new { |controller| request.headers['X-PJAX'] ? false : 'application' }
end
ага, <зануда>в следующий коммит, добавьте пару пробелов перед layout </зануда>
Прикольный плагин. Правда развиваться ему еще есть куда.
С радостью выслушаю ваши предложения.
Ну, в вашем yii варианте расширения не предусмотрен переход по анкорной ссылке на нужную страницу (когда страница открывается в первый раз).
Вы про это: amsterdamusic.com.ua/#!/artists?
1) Она работает, но, дважды подгружается контент страницы. Первый раз — главная страница. А потом уже по аякс — та что нужна. Не лучше ли при первом открытии сайта в самом начале выдачи главной страницы делать редирект на нужную?
P.S.: я код смотрел бегло, но, этого не заметил там.
P.S.: я код смотрел бегло, но, этого не заметил там.
Вижу, поищите в инете, решений уйма есть. Просто пока острая нехватка времени.
Ладно, попробую слету ответить:
//… тут title и остальное
А вообще для подобного hash евания страницы есть jquery bbq, он помощнее вроде + он уже включен в yii.
//… тут title и остальное
А вообще для подобного hash евания страницы есть jquery bbq, он помощнее вроде + он уже включен в yii.
Блин, забыл про хабрапарсер, вот вариант:
<html>
<head>
<script>if(location.hash!=='')location.href=location.hash.replace('!/','');</script>
//.. Тут тайтл и так далее
</head>
//.. Тут все остальное и сам плагин тоже может быть.
</html>
За BBQ спасибо, надо будет изучить. Но вы ошиблись, я совершенно не знаком с Yii. Я фанат codeigniter и Kohana :)
Возможно, это оправдано. Проблема только в том, что у пользователей не-pushState браузеров постоянно будет меняться формат url — с хешем и без хеша. Спасибо за замечание, поупражняюсь над этим.
Возможно, это оправдано. Проблема только в том, что у пользователей не-pushState браузеров постоянно будет меняться формат url — с хешем и без хеша. Спасибо за замечание, поупражняюсь над этим.
плохо что демки нет
Реализация фактически не отличается от оригинальной – pjax.heroku.com/
Демка не только даёт убедиться что технология работает, но и помогает понять почему не работает у меня. А вобще спасибо.
Sign up to leave a comment.
Создание одностраничного ajax-приложения с поддержкой History API (и без нее)