Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получить данные из формы и переадресовать на страницу (https://javascript.ru/forum/dom-window/78836-poluchit-dannye-iz-formy-i-pereadresovat-na-stranicu.html)

firsmember 11.11.2019 10:53

Получить данные из формы и переадресовать на страницу
 
Доброго времени маги JS :thanks: , снова я с нубскими вопросами...
Есть форма которая не работает так как мне нужно, а нужно срочно, потому решено сделать костылем:
<form method="get" action="">
 <input type='text' name='age_min' id='age_min' class='age_min'>
 <input type='text' name='age_max' id='age_max' class='age_max'>
 <select name="height_min" id="height_min" >
   <option value="150">150</option>
   <option value="155">155</option>
   <option value="160">160</option>
   <option value="165">165</option>
   <option value="170">170</option>
</select> 
<select name="height_max" id="height_max" >
   <option value="150">150</option>
   <option value="155">155</option>
   <option value="160">160</option>
   <option value="165">165</option>
   <option value="170">170</option>
</select>
<select name="lang" id="lang" >
   <option value="RUS">RUS</option>
   <option value="USA">USA</option>
</select>
<select name="country_40" id="country_40" >
   <option value="RUS1">RUS</option>
   <option value="USA1">USA</option>
</select>
<input type='text' name='keyword' id='keyword' class='keyword'>
<select name="per_page" id="per_page" >
   <option value="1">1</option>
   <option value="4">4</option>
   <option value="8">8</option>
   <option value="16">16</option>
   <option value="20">20</option>
   <option value="40">40</option>
</select>
<button>Искать</button>
</form>


на выходе получаю такой адрес:
http://site.com/ru/search?age_min=18...16&um_search=1

&um_search=1 - дописывается всегда в конце, так и должно быть, так и нужно...

Хочется получить введенные значения "на лету" и при нажатии на кнопку, сформировать собственно адрес по типу указанного выше и переадресовать человека на этой же странице по сформированному адресу, Очень важно, чтобы выбранные ранее данные после загрузки страницы снова ввелись в эту форму... что бы если например человек решит изменить один из пунктов в адресе сформировались все те же, что были и а те которые он изменил изменились....

Ума не приложу, как реализовать , help me pleace

рони 11.11.2019 12:06

firsmember,
:-?
<form method="get" action="">
 <input type="hidden" name='um_search' value='1'>

firsmember 11.11.2019 12:19

Спасибо, это понял, @laimas разъяснил

laimas 11.11.2019 13:34

Атрибут id, это уникальный идентификатор, грубо говоря точечный адрес элемента. Это поиск элемента по его индивидуальному признаку, которым обладает только он. Этот параметр элемента не является обязательным, и если он не используется, то прописывание его всем элементам будет означать бесполезную передачу мусора на клиента.

При передаче формы на сервер, сервер получит ассоциативный массив (в случае если на сервере такой язык как РНР) параметров, в котором ключи будут в том порядке, в котором расположены элементы формы имеющие имена равные этим параметрам. Какой порядок ключей в ассоциативном массиве, для сервера глубоко наплевать, на то она и ассоциация.

Если нужно чтобы ключ um_search был в конце и передавал значение 1, то нужно скрытое поле, которое описал рони, поместить в конец формы. Это все что нужно, а если "Это не то, что нужно...", то не понятно что вообще нужно, о чем я и упомянул в другой теме.

firsmember 11.11.2019 13:49

Цитата:

Сообщение от laimas (Сообщение 515356)
Если нужно чтобы ключ um_search был в конце и передавал значение 1, то нужно скрытое поле, которое описал рони, поместить в конец формы. Это все что нужно, а если "Это не то, что нужно...", то не понятно что вообще нужно, о чем я и упомянул в другой теме.

Точно, я не понял его просто, о чем он, все верно, ок, с этим ясно..
А как реализовать на js все это? Допустим url я смогу сформировать, но как сделать все остальное, особенно после перехода по сформированному url заполнить форму теми же данными...

laimas 11.11.2019 14:28

Цитата:

Сообщение от firsmember
Допустим url я смогу сформировать

Зачем его формировать, если это автоматически сделает бразуер при отправлении формы?

Цитата:

Сообщение от firsmember
после перехода по сформированному url заполнить форму теми же данными

Вы форму отправляете серверу или на деревню дедушке? А если серверу и он принимает ее, то может ли он вернуть ее клиенту с его выбором?

firsmember 11.11.2019 14:55

Я выше объяснил, это своего рода костыль, сайт будет переписываться т.к. не работает должным образом, сейчас нужно обойтись грубо говоря малой кровью, возможно то что я описал выше реализовать на js все же?

laimas 11.11.2019 15:07

Цитата:

Сообщение от firsmember
возможно то что я описал выше реализовать на js все же?

Можно, но зачем тогда нужна форма, если она сама по себе? Сервер не просто должен принять форму, но и обязан проверить ее данные. Если при проверки формы будут ошибки, как поступить? Если не будет как поступить?

Каждое частное из общей задачи может влиять на сценарий, поэтому не костылями надо заниматься, а думать от общего к частному, из которого и будет видно как поступить, и где выгоднее это сделать.

firsmember 11.11.2019 15:18

Это форма которая фильтрует объекты... (фильтр в общем) Поля там именно те, что я отписал, при переходе по сформированной ссылке сервер все сделает. Так, что то, что я прошу, это то что мне нужно!

laimas 11.11.2019 15:20

Цитата:

Сообщение от firsmember
Поля там именно те, что я отписал

Уверены, что ваш сервер будет всегда получать "ваши поля"?

firsmember 11.11.2019 15:27

Цитата:

Сообщение от laimas
"ваши поля"?

да, если при нажатии на кнопку "Искать" мы перейдем по сформированной по моему примеру ссылке и снова заполним форму введенными и выбранными данными - то - да, всегда.

firsmember 11.11.2019 15:31

Цитата:

Сообщение от laimas
Можно

Вы поможете мне с этим?

laimas 11.11.2019 15:49

Цитата:

Сообщение от firsmember
да, если при нажатии на кнопку "Искать" мы перейдем по сформированной по моему примеру ссылке и снова заполним форму введенными и выбранными данными - то - да, всегда.

Уверены? Да я вам хоть с клиента, хоть с сервера спокойно могу прислать такой запрос, что вашему серверу мало не покажется.

firsmember 11.11.2019 15:51

Тут никто этого делать не будет

firsmember 11.11.2019 16:04

Потому, если вас не затруднит, вы можете все таки подсказать, как решить задачу?

laimas 11.11.2019 16:10

Цитата:

Сообщение от firsmember
Тут никто этого делать не будет

Что за детский лепет, сеть не ограничивается данным форумом.

Цитата:

Сообщение от firsmember
Это форма которая фильтрует объекты... (фильтр в общем)

И что она фильтрует?

firsmember 11.11.2019 16:19

Цитата:

Сообщение от laimas
Что за детский лепет, сеть не ограничивается данным форумом.

Речь не об этом, сайт закрытый, для внутреннего использования. Потому внешних людей там нет и не будет, кто бы составлял похожие запросы, и в следующем месяце мы будем делать новый..
Вы издеваетесь над мной да? столько вопрос без какого либо желания помочь, я вас понял.. Большое спасибо.

laimas 11.11.2019 16:36

Да ити его мать, думать вы будете или нет? Что значит фильтровать объекты и где? Объекты, в прямом смысле этого слова, можно фильтровать только на клиенте. А значит и ничего не надо оправлять на сервер.

Если же на сервере, это запрос к базе по фильтру, то должны быть его значения по умолчанию, которые будут применяться к запросу к базе при любых ошибках запроса от клиента. И похрен что там у вас, ООО, компания или секта, это элементарное правило.

И страницу эту формирует сервер, а значит при ошибках с клиента он просто должен отдать форму по умолчанию, иначе с отмеченным выбором клиента. Что рассказывать как это делается серверным языком или все-таки не надо?

Вообще ничего не придется отмечать ни JS на клиенте, ни серверу в форме, если этот запрос сделать асинхронным. Ищите что такое Ajax и ....

Зе...ли обидчивые при этом думать не желающие.

firsmember 11.11.2019 16:52

Цитата:

Сообщение от laimas
Зе...ли обидчивые при этом думать не желающие.

Да при чем тут думать не желающие, я спросил, а вы про другое, ну объяснили мне в чем я не прав и все, я сразу сказал, что мало что в этом соображаю пока.. Просто вы меня лечите уже часа 4 наверное если не больше в этом направлении, а помочь вам 5 минут делов, ну понял я что если ввели херню то нужно не заполнять потом форму и не отправлять запрос, только у нас фигню никто вводить не будет, все вводят определенные данные... все... Я не обижаюсь, а тупо не понимаю чего вы от меня хотите, при том, что я просто попросил помочь с JS кодом все.. :cray:

laimas 11.11.2019 17:20

Цитата:

Сообщение от firsmember
а помочь вам 5 минут делов

Я не пишу код основанный на эмоциях, догадках и прочем. И вытягивать клещами "конкретику" для уяснения, чего там делается, чтобы что-то предложить тем более не буду, у меня нет на это времени. Я предложил - Ajax, тогда и не будет вопросов "как отметить...", ищите в сети, на форуме, это не сложно, применяйте.

Malleys 12.11.2019 09:20

firsmember, вы задали очень хороший вопрос.

Цитата:

Сообщение от firsmember
Хочется получить введенные значения "на лету" и при нажатии на кнопку, сформировать собственно адрес по типу указанного выше и переадресовать человека на этой же странице по сформированному адресу

Форма именно так и работает, если вы не укажете у <form> атрибут action. (Т. е. произойдёт переход на эту же страницу, но с дополнительными параметрами)

Цитата:

Сообщение от firsmember
Очень важно, чтобы выбранные ранее данные после загрузки страницы снова ввелись в эту форму...

Вам нужно пройтись циклом по параметрам и вписать каждое значение в соответствующее поле. Я приведу пример ниже.

Цитата:

Сообщение от firsmember
name='age_min' id='age_min' class='age_min'

Можно указать только name, именно оно определяет имя поля в форме, которое включается в запрос. Если нужно в стилях, то элемент определяется как [name=age_min]

Цитата:

Сообщение от firsmember
<option value="150">150</option>

Можно не указывать атрибут value, если значение поля и надпись в раскрывающемся списке одинаковы. Т. е. достаточно <option>150</option>

Цитата:

Сообщение от firsmember
type='text'

Можно не указывать, так как по умолчанию используется именно текст.

Цитата:

Сообщение от firsmember
Ума не приложу, как реализовать

Вот пример с учётом всего вышенаписанного... (Можно проверить в отдельной вкладке — https://charm-launch.glitch.me/form.html)
<form method="get" id="search-form">
	<input name="age_min">
	<input name="age_max">
	<select name="height_min">
		<option>150</option>
		<option>155</option>
		<option>160</option>
		<option>165</option>
		<option>170</option>
	</select>
	<select name="height_max">
		<option>150</option>
		<option>155</option>
		<option>160</option>
		<option>165</option>
		<option>170</option>
	</select>
	<select name="lang">
		<option>RUS</option>
		<option>USA</option>
	</select>
	<select name="country_40">
		<option>RUS</option>
		<option>USA</option>
	</select>
	<input name="keyword">
	<select name="per_page">
		<option>1</option>
		<option>4</option>
		<option>8</option>
		<option>16</option>
		<option>20</option>
		<option>40</option>
	</select>
	<input type="hidden" name="um_search" value="1">
	<button>Искать</button>
</form>
<script>
	const searchForm = document.getElementById("search-form");
	for(const [key, value] of new URL(location).searchParams) {
		const control = searchForm.elements.namedItem(key);
		if(!control) continue;
		control.value = value;
	}
</script>


Цитата:

Сообщение от firsmember
Просто вы меня лечите уже часа 4 наверное если не больше в этом направлении, а помочь вам 5 минут делов

Очевидно он не знает, как это сделать, поскольку даже приблизительно не было ответа касательно вашего вопроса о заполнении формы данными, вместо этого сначала идут вещи, о которых новичкам как-раз таки нужно рассказывать, а не задавать им вопросы, а затем оскорбления.

laimas 12.11.2019 11:39

Malleys, бабушке сво
Цитата:

Сообщение от Malleys
Строка с параметрами содержит их в определённом порядке, о какой ассоциации может идти речь?

Что будем дурочку включать?


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