Откройте URL-адрес на основе поискового запроса без php? Q = (myTerm) и вместо этого с простым / (myTerm)

Это сводит меня с ума. Я, очевидно, не понимаю чего-то довольно фундаментального, я надеюсь, что кто-то сможет пролить свет на этот вопрос.

        <form action="/tagged" method="get">
            <input type="text" name="q" value="{SearchQuery}"/>
            <input type="submit" value="Search"/>
        </form>    

На этой странице дает мне http://syndex.me/tagged?q=yellow Но если я изменю /tagged на /search (состояние по умолчанию для формы поиска tumblr), он действительно сделает правильные вещи и предоставит URL-адрес для эффекта http://syndex.me/search/yellow.

Все это просто потому, что поиск по тамблерам на самом деле не работает. Верно. Компания стоимостью 800 миллионов долларов не имеет эффективной функции поиска. Дело в том, что если вы перейдете на http://syndex.me/tagged/yellow, это на самом деле работает!. ТАК Я просто пытаюсь взломать службу и переключить /search на tagged. Довольно умственно.

Я счастлив взломать это любым возможным способом ... jQuery?

Огромное спасибо.


person RGBK    schedule 01.10.2011    source источник
comment
Присоединить обработчик событий к событию submit, которое перенаправляет пользователя на действующий URL-адрес? Не особо чисто, заметьте.   -  person Alex    schedule 01.10.2011
comment
Но почему я получаю? Q = при поиске по тегам и / при поиске? Для меня это просто не имеет смысла. Это из-за того, что две страницы разные?   -  person RGBK    schedule 01.10.2011
comment
Похоже, есть решения about.   -  person Alex    schedule 01.10.2011
comment
Я согласен с @Alex. Судя по всему, у tumblr есть перенаправление на / search, но не на / tagged. Я бы взломал форму поиска и обновил URL-адрес, чтобы отправить правильный URL-адрес.   -  person swatkins    schedule 02.10.2011


Ответы (1)


Части вашей страницы являются ядром функции поиска:

JavaScript:

function handleThis(formElm){
    window.location="http://syndex.me/tagged/"+formElm.q.value+"";
    return false;
}

HTML:

<form onsubmit="return handleThis(this)" >
    <input type="text" name="q" value=""/>
</form> 

Слушатель событий привязан к вашей форме с помощью onsubmit="return handleThis(this)".

  • onsubmit срабатывает, когда пользователь нажимает клавишу ввода или кнопку поиска.
  • Вы заметите return handleThis(this) внутри атрибута onsubmit (также известного как обработчик событий). Эта функция (которая определена на той же странице; смотрите вперед) вызывается с ключевым словом this в качестве первого аргумента. this из контекста обработчика событий относится к элементу владельца прослушивателя событий, в данном случае <form>.
    В handleThis(formElm) вы заметили "http://syndex.me/tagged/"+formElm.q.value. formElm.q относится к элементу ввода с именем q внутри элемента формы. formElem.q.value содержит значение элемента ввода, который содержит ключевые слова поиска. Только что созданный URL-адрес назначается window.location, который инициирует новый запрос http://syndex.me/tagged/ search_terms.
    После этой строки вы видите return false. Внутри обработчика событий onsubmit вы видели return handleThis(this). Возвращаемое значение handleThis передается обработчику события onsubmit. Итак, выражение равно onsubmit="return false". Это означает, что форма больше не отправляется.
  • Атрибут действие не определен. Как упоминалось ранее, в этом нет необходимости, потому что форма не отправлена ​​return false. При возникновении ошибки или если пользователь отключил JavaScript, форма отправляется по URL-адресу, указанному в action. Поскольку атрибут action не указан, вместо него используется текущий URL-адрес страницы, в данном случае http://syndex.me/. Все именованные элементы формы добавляются в запрос, поэтому конечный URL будет http://syndex.me/?q= search_terms

Чтобы вернуться к вашему вопросу, <form action="/tagged"method = "get"> `:

  • Нет onsubmit обработчика событий.
  • Поскольку обработчик событий onsubmit не указан, HTML-форма будет отправлена ​​браузером (воображаемый обработчик onsubmit будет равен return true.
  • URL действия определен как /tagged, который переводится в файл с именем "tagged" в корневом каталоге вашего хоста < / em>. В данном случае: http://syndex.me/tagged?q= search_terms. (q=.. является результатом элемента ввода с именем q).
    Если вы измените action на /tagged/ вместо /tagged, отправленная форма запросит следующую страницу: http://syndex.me/tagged/?q= search_terms

Когда вы меняете /tagged на /search, ваша форма отправляется на http://syndex.me/search?q=.... Как видно из заголовков, это местоположение перенаправляется на http://syndex.me/search/....
Такое поведение, вероятно, достигается с помощью правила, определенного в _ 45_:

RewriteEngine On
RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]

Понял?

person Rob W    schedule 01.10.2011
comment
Спасибо, что нашли время так хорошо это объяснить, это искренне признательно. - person RGBK; 02.10.2011