Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразование GET запроса из формы (https://javascript.ru/forum/misc/36811-preobrazovanie-get-zaprosa-iz-formy.html)

krum 28.03.2013 09:44

Преобразование GET запроса из формы
 
Добрый день! При отправке данных из формы методом GET я получаю в адресной строке запрос вида http://mysite.ru/modul/?id=8 а мне нужно получить http://mysite.ru/modul/8/ . Можно ли это как то реализовать при помощи JS?
<form method="GET" action="modul/">
<input type="text" name="id"></input>
<input type="submit" value="Найти">
</form>

vashurin 28.03.2013 10:13

document.getElementsByTagName('form')[0].onsubmit=function(){
var uri = document.getElementById('id').value;
window.location = 'http://mysite.ru/modul/' +uri+'/';
return false;
}

А вообще поправьте модуль или .htaccess на сервере.

krum 28.03.2013 10:21

Как раз дело в том, что это необходимо для ЧПУ. В .htaccess прописан ModRewrite. Так как я в JS совсем плох, подскажите плиз конкретную реализацию метода, описанного выше. Куда этот код вставить и как его использовать.

vashurin 28.03.2013 11:34

Цитата:

Сообщение от krum (Сообщение 243070)
Как раз дело в том, что это необходимо для ЧПУ. В .htaccess прописан ModRewrite. Так как я в JS совсем плох, подскажите плиз конкретную реализацию метода, описанного выше. Куда этот код вставить и как его использовать.

ну пропишите форме какое нибудь id, и поменяйте код на такой:

Код:

<form method="GET" id="someid" action="modul/">
<input type="text" name="id"></input>
<input type="submit" value="Найти">
</form>
<script>
document.getElementById('someid').onsubmit=function(){
var uri = document.getElementById('id').value;
window.location = 'http://mysite.ru/modul/' +uri+'/';
return false;
}
</script>

И все заработает... Хотя, это не лучшая реализация, лучше навешивание события обернуть в функцию и вызывать на событие загрузки DOM или загрузки страницы. :) Да, и еще б введенные пользователем данные проверять, на то, что введено :).

rgl 28.03.2013 12:15

1. Убрать из инпута name, тогда он не будет приписываться к урлу.
2. Чтобы не хардкодить имя сайта, можно сделать так:
onsubmit="this.action+=this.elements[0].value;"
<form method="GET" action="modul/" onsubmit="this.action+=this.elements[0].value;">
<input type="text" >
<input type="submit" value="Найти">
</form>

krum 28.03.2013 12:29

Спасибо огромное! Вот этот совет помог -
Цитата:

Сообщение от rgl
Убрать из инпута name, тогда он не будет приписываться к урлу.

. Сделал так:
<form method="GET" id="someid" action="modul/">
<input id="val" type="text"></input>
<input type="submit" value="Найти">
</form>
<script>
document.getElementById('someid').onsubmit=function(){
var uri = document.getElementById('val').value;
window.location = 'http://mysite.ru/modul/' +uri+'/';
return false;
}
</script>

А вот во втором совете, который вроде как удобнее, в конце выскакивает знак вопроса и нет закрывающего слэша: http://mysite.ru/modul/8?

rgl 28.03.2013 12:42

Цитата:

Сообщение от krum
А вот во втором совете, который вроде как удобнее, в конце выскакивает знак вопроса и нет закрывающего слэша:

Ну слэш добавить не сложно:
onsubmit="this.action+=this.elements[0].value+'/';"
а что делать с вопросом - не знаю.

krum 28.03.2013 12:51

Получается, что знак вопроса встает как раз после слэша - http://mysite.ru/modul/8/? Его можно как то вырезать?
<form method="GET" id="someid" action="modul/" onsubmit="this.action+=this.elements[0].value+'/';">
<input id="val" type="text"></input>
<input type="submit" value="Найти">
</form>


А если в инпуте оставить name, то тогда становится понятнее, откуда он взялся ))
<form method="GET" id="someid" action="modul/" onsubmit="this.action+=this.elements[0].value+'/';">
<input name="id" type="text"></input>
<input type="submit" value="Найти">
</form>

На выходе получим - http://mysite.ru/modul/8/?id=8

rgl 28.03.2013 13:34

onsubmit="window.location.assign(this.action+this. elements[0].value+'/');retun false;"


Часовой пояс GMT +3, время: 01:34.