Я хочу начать со страниц, которые работают без Javascript, затем добавить причудливость Javascript и, наконец, добавить несколько кусочков Ajax.
Все это, кажется, держит вещи в чистоте, я был очень рад своим первым экспериментам с ним. Затем я столкнулся со следующей проблемой, для которой не вижу хорошего решения. Для этих 2 примеров страниц:
<!-- /products/ -->
<ul>
<li>
Product A thumbnail
<a href="/details/1/">Details for A</a>
</li>
<li>
Product B thumnail
<a href="/details/2/">Details for B</a>
</li>
</ul>
<!-- /details/<id>/ -->
<script type="text/javascript" src="/details.js/"></script>
show details about the product with the given id
details.js will unobtrusively enhance it
Функциональность, которую я хочу
Используйте Ajax для динамической загрузки некоторых сведений о продукте на странице /products/
, например, при наведении курсора на миниатюру. Точнее, загрузите и покажите упрощенную версию /details/<id>/
на странице /products/
.
Ненавязчивая реализация
При наведении на фотографию сделайте запрос Ajax для атрибута href
соответствующего якоря. Сервер может ответить полной страницей /details/<id>/
, а селектор JQuery может вырезать только интересные части. Кроме того, сервер может увидеть, что запрос особенный, и просто вернуть интересные части. Пока все хорошо, легко и чисто.
проблема
Страница /details/<id>/
- это больше, чем просто HTML. У него также был свой Javascript, чтобы сделать его причудливым, поэтому я хочу использовать этот Javascript на странице /products/
. Поэтому я хочу, чтобы /products/
извлекал не только HTML из /details/<id>/
, но и копировал поведение Javascript, присутствующее на полноценной /details/<id>/
странице.
Единственное (плохое) решение, которое я мог придумать
Напишите явный код для репликации действий браузера при загрузке страницы: извлечение /details/<id>/
, поиск всех тегов <script>
, извлечение этого Javascript, запуск обработчиков загрузки. Это много шаблонных вещей, которые, кажется, трудно понять правильно. Я явно не хочу писать это, потому что результат будет совсем не простым.
Мне также кажется, что эта проблема возникает очень часто, если вы действительно придерживаетесь ненавязчивого Ajax, и для этого должно быть более элегантное решение.