Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача GET-параметра в URL (https://javascript.ru/forum/misc/78544-peredacha-get-parametra-v-url.html)

karnager 30.09.2019 13:49

Передача GET-параметра в URL
 
Здравствуйте! Хочу реализовать следующее: когда я перезагружаю страницу вроде mysite.com, то нужно добавить параметр после URL, чтобы получить mysite.com/?value=key (в конец строки)

Уже дошел до проверки и такого кода:

var key = '123';
var parameter = '?value=' + key;
if ((window.location.href.indexOf(parameter) === -1) || (window.location.href.indexOf('?') === -1)) {
  window.location.href += parameter;
}


Однако как быть, если в параметре уже есть GET-запросы, разделенные вопросительным знаком. И если ссылка уже имеет другие параметры, например: mysite.com/?param=1&filter=3, можно ли передать мой параметр в конец ссылки? mysite.com/?param=1&filter=3&value=123, чтобы он разделялся не значком вопросительного знака, поскольку 2 знака выдадут ошибку, а знаком &

Спасибо

ksa 30.09.2019 13:54

Цитата:

Сообщение от karnager
И если ссылка уже имеет другие параметры, например: mysite.com/?param=1&filter=3, можно ли передать мой параметр в конец ссылки? mysite.com/?

Конечно можно. :yes:

Цитата:

часть адреса после символа ?, включая символ ?
https://javascript.ru/window-location

Но на ГЕТ параметры есть ограничение по размеру
http://qaru.site/questions/18078/max...tp-get-request

karnager 30.09.2019 14:01

Мне нужно передавать параметр вида mysite.com/?value=123 если в ссылке нет других параметров и передавать со значком амперсанд если в ссылке уже есть другие параметры: mysite.com/?param=1&filter=3&value=123



Пробовал вот такое условие создать в цикле:

<script> 
var key = '123';
var param1 = '?value=' + key;
var param2 = '&value=' + key;
if (window.location.href.indexOf('?') === -1) {window.location.href += param1;}
  else if (window.location.href.indexOf('&') === -1) {window.location.href += param2;}
</script>


Но тогда он сначала проверяет первое условие и создает ссылку mysite.com/?value=123, а потом еще добавляет после второй раз mysite.com/?value=123&value=123

ksa 30.09.2019 14:03

Цитата:

Сообщение от karnager
Но тогда он сначала он проверяет первое условие и создает ссылку mysite.com/?value=123, а потом еще добавляет после второй раз mysite.com/?value=123&value=123

Так ты не удачно строишь проверки УРЛ - в этом все дело. ;)

karnager 30.09.2019 14:14

Да вот и пытаюсь понять. Вообще по ссылке, что прислали, за это отвечает search

ksa 30.09.2019 14:35

Цитата:

Сообщение от karnager
Вообще по ссылке, что прислали, за это отвечает search

Именно. :yes:

Цитата:

Сообщение от karnager
Да вот и пытаюсь понять.

Ветвление должно быть "жестким". Или налево... Или направо...

window.location.search==''

Параметров нет. Иначе они есть.
Правда если search не "пусто" могут быть и другие варианты... Но отрабатывать их нужно именно в "ветке" где параметры есть. ;)

karnager 30.09.2019 18:29

<script>
var key = '123';
var param1 = '?value=' + key;
var param2 = '&value=' + key;
if (window.location.search=='') {window.location.href += param1;}
else {window.location.href += param2;}
</script>


Тут подставляется со знаком все ок, только они бесконечно http://prntscr.com/pcyd9e дальше добавляются автоматом и страница сама перезагружается. Как сделать только 1 раз?

karnager 30.09.2019 23:18

Есть у кого-нибудь идеи? Задача-то не очень простая...

ksa 01.10.2019 07:15

Цитата:

Сообщение от karnager
Как сделать только 1 раз?

Проверять, что там уже есть твой параметр. ;)

ruslan_mart 03.10.2019 15:54

(() => {
  const key = 'key';
  const value = 'value';
  
  const params = new URLSearchParams(window.location.search);

  if (params.get(key) !== value) {
    params.set(key, value);
    window.location.search = params.toString();
  }

})();


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