Я запускаю приложение Rails, которое получает большой трафик на данный момент, поэтому я начал использовать кэширование страниц для повышения производительности. Пока все работает как шарм. Но когда я попытался также кэшировать результаты поиска, у меня возникла странная проблема.URL-кодирование в JS для значимых URL-адресов и Rails-страниц Кэширование страниц
Мой подход:
- Используйте осмысленные URL-адреса для поиска и разбиение на страницы (/ поиск запроса = термин & страница = 3 становится/поиск/термин/3?)
- Используйте Javascript для отправки формы - если отключен JS он возвращается к старой форме (которая также работает с моими маршрутами, но без кэширования)
Мой код:
// Javascript
function set_search_action() {
window.location = '/search/' + escape(document.getElementById('query').value);
return false;
}
// HTML
<form action="/search" id="search_form" method="get" onSubmit="return set_search_action();">
<input id="query" name="query" title="Search" type="text" />
<input class="submit" name="commit" type="submit" value="Search" />
</form>
Проблема
Все работает для одного слова, как "термин". Но когда я ищу «term1 term2», форма представляется в /search/term1 term2/ или /search/term1 term2/1. Он должен быть отправлен в /search/term1 + term2 Вот что должно сделать функция JS escape.
Пока он работает также с пространством в режиме разработки. Но я думаю, что это станет проблемой в режиме производства с включенным кешированием (URL-адреса не должны содержать пробелов).
Любые идеи о том, что я сделал не так? Благодаря!
+1 для подробного объяснения того, где и когда действует '% 20'. – Tomalak