Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   переделать GET запрос (https://javascript.ru/forum/misc/38074-peredelat-get-zapros.html)

iluxinil 17.05.2013 19:34

переделать GET запрос
 
есть некая форма, она отправляет 3 переменные в GET запрос
a1=pole1&a2=pole2&a3=pole3

собственно нужно, чтобы форма отправляла запрос вида
a=pole1+pole2+pole3

bes 18.05.2013 00:57

поясни смысл осуществления этой операции


думаю никак не отправить нужный тебе параметр, если ты хочешь вмешаться в последствия отправки формы, не вмешавшись в код этой отправки
хотя может есть способ

так никак, location.search новыми параметрами не заполнить, location.search изменяется после отправки формы, onunload не помогает, хотя здесь пишут, что можно http://javascript.ru/window-location (извращался по-всякому, у меня не вышло)

в нененавязчивом стиле some.php
<script>
function sendMyParam() {
	var str1 = '?my_param=my_value';
	var str2 = location.href.replace(location.search, '') + str1;
	location = str2
	window.location.search = '?my_param=my_value'; 
	console.log(str2);
	console.log("location.search=" + location.search);
}
</script>

<body onbeforeunload="return ''" onunload="sendMyParam()">
<form action"<?=$_SERVER['PHP_SELF']?>" onsubmit="sendMyParam()">
	<input name="a" value="pole">
	<input type="submit">
</form><br>

<?php
if (isset($_GET['my_param'])) echo $_GET['my_param']; else echo "no<br>";
if (isset($_GET['a'])) echo $_GET['a']; else echo "no";
?>



и так никак, хотя action меняется, параметр не приходит
<body onbeforeunload="return ''">
<?php
if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
?>
<form action"some.php" onmousedown="this.action='some.php?my_param=my_value'"
	onsubmit="this.action='some.php?my_param=my_value'; return false">
	<input name="a" value="pole">
	<input type="submit">
</form>



но можно убрать name у полей и отправить в <input type="hidden"> value, которое сформировать так как тебе нужно

<body onbeforeunload="return ''">
<?php
if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
?>
<form action"<?=$_SERVER['PHP_SELF']?>" onsubmit="this.my_param.value='my_value+' + this.a.value">
	<input name="a" value="pole">
	<input name="my_param" type="hidden">
	<input type="submit">
</form>

iluxinil 18.05.2013 14:44

спасибо.
мне последний вариант должен подойти.

только вместо "+" в строке браузера "%2B"
в оригинальном запросе "+" остается. а в моем нет.

<form action"<?=$_SERVER['PHP_SELF']?>" onsubmit="this.my_param.value=this.a1.value + '+' + this.a2.value">
	    <input name="my_param" type="hidden">
        <input name="a1" value="pole1">
        <input name="a2" value="pole2">
	    <input type="submit">
	</form>


он запрос не совсем понимает.
выводит надпись результаты по запросу и сам текст запроса нормально.
а вот сами результаты ищет только когда в урле "+"

подскажите, как исправить?

Deff 18.05.2013 15:51

Перехватить отправку
<form onsubmit="MyFunk();return false;"

В функции считать значения полей
var dataSend = $("#Myform").serialize( );
Конвертировать как надо и отправить Get запросом

iluxinil 18.05.2013 16:29

Цитата:

Сообщение от Deff (Сообщение 251306)
Перехватить отправку
<form onsubmit="MyFunk();return false;"

В функции считать значения полей
var dataSend = $("#Myform").serialize( );
Конвертировать как надо и отправить Get запросом

а можно на примере.
я только начинаю и на примере мне гораздо понятнее.
заранее спасибо.

bes 18.05.2013 20:39

Цитата:

Сообщение от iluxinil
он запрос не совсем понимает.
выводит надпись результаты по запросу и сам текст запроса нормально.
а вот сами результаты ищет только когда в урле "+"

он это кто? поясни подробно, что делаешь (второй раз прошу)

Deff имеет в виду отправить форму ajax-м

в том же нененавязчивом стиле
<script src="jquery-1.8.3.min.js"></script>
<body onbeforeunload="return ''">
<?php
if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
?>
<form class="myForm" action"<?=$_SERVER['PHP_SELF']?>" 
	onsubmit="$.get('some.php', {my_param: this.a1.value + '+' + this.a2.value}, function (data) {alert(data)}); return false">
	<input name="my_param" type="hidden">
	<input name="a1" value="pole1">
	<input name="a2" value="pole2">
	<input type="submit">
</form>


PS: + может превращаться в пробел
<body onbeforeunload="return ''">
<?php
if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
?>
<form class="myForm" action"<?=$_SERVER['PHP_SELF']?>" onsubmit="this.my_param.value=this.a1.value + ' ' + this.a2.value">
	<input name="my_param" type="hidden">
	<input name="a1" value="pole1">
	<input name="a2" value="pole2">
	<input type="submit">
</form>

iluxinil 18.05.2013 21:32

Вложений: 1
Цитата:

Сообщение от bes
он это кто? поясни подробно, что делаешь (второй раз прошу)

он это поиск по сайту (по тегам) как раз принимает строку вида a=teg1+teg2
хочется убрать поле ввода тегов и сделать что то вроде этого

iluxinil 18.05.2013 21:34

Цитата:

Сообщение от bes
Deff имеет в виду отправить форму ajax-м

сложновато пока это для меня, но попробую разобраться.

Цитата:

Сообщение от bes
PS: + может превращаться в пробел

так мне надо чтобы именно + оставался.

Deff 18.05.2013 21:56

Цитата:

Сообщение от iluxinil
хочется убрать поле ввода тегов и сделать что то вроде этого

Тогда Вам удобнее скрыть старую форму/если нет возможности трансформировать РНР приём формы нового вида/,
Сгенерить div c радио кнопками и просто кнопкой "найти", - по клику на которую, - будут считаны значения радиокнопок и вставлены в старую форму.

bes 18.05.2013 22:05

Цитата:

Сообщение от iluxinil
он это поиск по сайту (по тегам) как раз принимает строку вида a=teg1+teg2

покажи код поиска, тогда можно будет рассуждать

<body onbeforeunload="return ''">
<?php
if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
?>
<form class="myForm" action"<?=$_SERVER['PHP_SELF']?>" onsubmit="this.my_param.value=this.a1.value + '+' + this.a2.value">
	<input name="my_param" type="hidden">
	<input name="a1" value="pole1">
	<input name="a2" value="pole2">
	<input type="submit">
</form>
<script>
console.log(location.search);
console.log(unescape(location.search));
</script>

http://javascript.ru/encodeuricomponent

iluxinil 18.05.2013 22:10

мне этот вариант больше нравится, только не + в пробел, а наоборот пробел в + превращается.

Цитата:

Сообщение от bes
01 <body onbeforeunload="return ''">
02 <?php
03 if (isset($_GET['my_param'])) echo "my_param=".$_GET['my_param'].'<br>'; else echo "no my_param<br>";
04 if (isset($_GET['a'])) echo "a=".$_GET['a'].'<br>'; else echo "no a<br>";
05 ?>
06 <form class="myForm" action"<?=$_SERVER['PHP_SELF']?>" onsubmit="this.my_param.value=this.a1.value + ' ' + this.a2.value">
07 <input name="my_param" type="hidden">
08 <input name="a1" value="pole1">
09 <input name="a2" value="pole2">
10 <input type="submit">
11 </form>

вот бы еще лишнее убрать, длина GET как то ограничивается или будет считано все что передается, хоть 1000 знаков?

bes 18.05.2013 22:17

Цитата:

Сообщение от iluxinil
вот бы еще лишнее убрать, длина GET как то ограничивается или будет считано все что передается, хоть 1000 знаков?

http://httpd.apache.org/docs/2.0/mod...mitrequestline
Цитата:

Default: LimitRequestLine 8190
со стандартными настройками Apache больше не примет, у других другая цифра + браузеры могут ограничивать, в общем я гуглю за тебя :)

Цитата:

Сообщение от bes
убрать name у полей


Deff 18.05.2013 22:20

Я тут сомневаюсь на счет приеёма + в get отправке
В принципе при отправке строка сериализуется(и плюсы тожа), так что лучше все таки новые параметры засунуть в старую форму, и отправить программным субмитом

bes 18.05.2013 22:22

Цитата:

Сообщение от Deff
так что лучше все таки новые параметры засунуть в старую форму

+-то у него также уйдёт, как и уходил

Deff, лучше узнать что у него за поиск, мои экстрасенсорные возможности уже иссякли :D

Deff 18.05.2013 22:24

Ну пусть PHP обработчик выкладывает

bes 18.05.2013 22:33

Цитата:

Сообщение от Deff
bes,
Ну если он даст полную строку action="" я тьву покажу запросную строку

Deff, а что там можно показать ещё, кроме как после адрес_ресурса идут параметры после ? вида param=value и разделяемые между собой & и далее возможна hash-строка после #

+ через адресную строку, как я полагаю, может уйти только как пробел

Deff 18.05.2013 22:38

bes,
Лан - я поэкстрасенсорю
Думаю он хочет приплюсовать радиополя к пустым инпутам,
Собственно ранее он вбивал породу собаки - а теперь хочет воткнуть радиокнопкой, для этого в радио должен быть полный value c полным старым запросом в input

Deff 18.05.2013 22:43

Ксать интересно нафига второе поле в форме, судя по новой хотелки - там один параметр
Видю
Там кошки - собаки и пол

bes 18.05.2013 22:48

Deff, а я предполагаю, что ему нужно
либо это
http://javascript.ru/decodeURIComponent
либо это
http://www.php.su/urldecode

теперь твоя очередь :D

Deff 18.05.2013 22:52

bes,
В jQuery есть $("#Myform").serialize( ); которое уже дает данные в GET отправке , останецо ток добавить action

Deff 18.05.2013 23:01

iluxinil,
Приведите два вида запроса ( скриншоты)
Как Вы по старому искали кошек - собак

bes 18.05.2013 23:10

Цитата:

Сообщение от Deff
В jQuery есть $("#Myform").serialize( ); которое уже дает данные в GET отправке , останецо ток добавить action

ему свой параметр надо было отправить, поэтому собирать в строку для запроса все параметры не было смысла


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