В веб-приложении, использующем вызовы AJAX, мне нужно отправить запрос, но добавить параметр в конец URL, например:
Оригинальный URL:
Результирующий URL:
http: //server/myapp.php? id = 10 & enabled = true
Ищите функцию JavaScript, которая анализирует URL-адрес, просматривая каждый параметр, затем добавляет новый параметр или обновляет значение, если оно уже существует.
javascript
url
parsing
parameters
query-string
Лессан Ваэзи
источник
источник
Ответы:
Базовая реализация, которую вам нужно адаптировать, будет выглядеть примерно так:
Это примерно в два раза быстрее, чем решение на основе регулярных выражений или поиска, но это полностью зависит от длины строки запроса и индекса любого соответствия.
метод медленного регулярного выражения, с которым я сравнил для завершения (примерно на 150% медленнее)
источник
encodeURIComponent
а неencodeURI
? В противном случае любые символы, такие как=
,&
в вашем имени или значении будут повреждать URI.Вы можете использовать один из них:
Пример:
источник
XML
кhttp://foo.bar/?x=1&y=2
так, чтобы конечный результат былhttp://foo.bar/?x=1&y=2&XML
. Это возможно? Я пыталсяurl.searchParams.set('XML');
,url.searchParams.set('XML', null);
иurl.searchParams.set('XML', undefined);
- но никто не работал в Chrome 63 .Спасибо всем за ваш вклад. Я использовал код annakata и изменил его, чтобы он также включал случай, когда в URL вообще нет строки запроса. Надеюсь, это поможет.
источник
escape(key)
иescape(value)
кencodeURIComponent
функции.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
Это очень простое решение. Он не контролирует существование параметра и не изменяет существующее значение. Он добавляет ваш параметр в конец, чтобы вы могли получить последнее значение в своем фоновом коде.
источник
url = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+part+"&"+url.split("?")[1] : (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+part+"#"+ url.split("#")[1] : url+'?'+part));
function appendQs(url, key, value) { return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value); };
https://localhost/preview/inventory.html?sortci=priceASC&sortci=priceASC&sortci=stitle
.Вот значительно упрощенная версия, в которой компромиссы между удобочитаемостью и меньшим количеством строк кода вместо микрооптимизированной производительности (и мы говорим о разнице в несколько миллисекунд, реально ... из-за природы этого (работа в местоположении текущего документа) ), это, скорее всего, будет запущено один раз на странице).
Вы бы тогда использовали это так:
источник
[\?&]
с([\?&])
в RegExp (я бы просто изменить его сам , но я не уверен , что если политики сообщества позволяет исправлять ошибки в ответах)..set первый agrument - ключ, второй - значение.
источник
И обратите внимание, что параметры должны быть закодированы перед добавлением в строку запроса.
http://jsfiddle.net/48z7z4kx/
источник
http://abc.def/?a&b&b
).У меня есть «класс», который делает это, и вот оно:
Я переопределил метод toString, поэтому нет необходимости вызывать QS :: getQueryString, вы можете использовать QS :: toString или, как я делал в примерах, просто полагаться на объект, приведенный в строку.
источник
Если у вас есть строка с URL, которую вы хотите украсить параметром, вы можете попробовать это:
Это значит что ? будет префикс параметра, но если у вас уже есть ? в
urlstring
, чем & будет префикс.Я бы также рекомендовал это сделать,
encodeURI( paramvariable )
если вы не указали жестко заданный параметр, но он находится внутриparamvariable
; или если у вас есть забавные персонажи в нем.См. Javascript URL Encoding для использования
encodeURI
функции.источник
Это простой способ добавить параметр запроса:
И это больше здесь .
Пожалуйста, обратите внимание на спецификации поддержки .
источник
Проверьте https://github.com/derek-watson/jsUri
Uri и манипулирование строк запроса в JavaScript.
Этот проект включает превосходную библиотеку регулярных выражений parseUri Стивена Левитана. Вы можете безопасно анализировать URL-адреса любых форм и размеров, независимо от того, являются ли они недействительными или отвратительными.
источник
Иногда, когда мы видим
?
в конце URL, я нашел несколько решений, которые генерируют результаты какfile.php?&foo=bar
. Я придумал, что мое собственное решение работает идеально, как я хочу!Примечание: location.origin не работает в IE, вот его исправление .
источник
Следующая функция поможет вам добавлять, обновлять и удалять параметры в или из URL.
// example1and
// example2
// example3
// Example4
// Example5
Вот функция.
источник
Это была моя собственная попытка, но я буду использовать ответ от annakata, так как он кажется намного чище:
Кроме того, я нашел этот плагин jQuery из другого поста на stackoverflow, и если вам нужна большая гибкость, вы можете использовать его: http://plugins.jquery.com/project/query-object
Я думаю, что код будет (не проверял):
источник
Добавление к ответу @ Vianney https://stackoverflow.com/a/44160941/6609678
Мы можем импортировать встроенный модуль URL в узел следующим образом
Пример:
Полезные ссылки:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
источник
Попробуй это.
источник
url.searchParams
это предварительно инициализированный список параметров для этогоURL
объекта.Мне нравится ответ Мехмета Фатиха Йылдыза, даже если он не ответил на весь вопрос.
В той же строке, что и его ответ, я использую этот код:
«Он не контролирует существование параметра и не изменяет существующее значение. Он добавляет ваш параметр в конец»
и тестер:
источник
Я хотел бы пойти с этой небольшой, но полной библиотекой для обработки URL в js:
https://github.com/Mikhus/jsurl
источник
Это то, что я использую, когда дело доходит до некоторых основных дополнений или обновлений URL-параметров на стороне сервера, таких как Node.js.
CoffeScript:
JavaScript:
источник
Самое простое решение, работает, если у вас уже есть тег или нет, и удаляет его автоматически, так что не будет добавлять одинаковые теги, получайте удовольствие
ЗАТЕМ
источник
Ответ Вианни Баджарта правильный; однако URL будет работать только в том случае, если у вас есть полный URL с портом, хостом, путем и запросом:
И URLSearchParams будет работать, только если вы передадите только строку запроса:
Если у вас есть неполный или относительный URL-адрес и вам не нужен базовый URL-адрес, вы можете просто разделить его,
?
чтобы получить строку запроса, и присоединиться позже, как показано ниже:Не совместим с Internet Explorer.
источник
var u = new URL(window.location), usp = u.searchParams;
вам не нужно использовать какие-либо причудливые расщепления строк.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Если вы возитесь с URL-адресами в ссылках или где-то еще, возможно, вам придется учесть и хеш. Вот довольно простое для понимания решение. Вероятно, не самый быстрый, поскольку он использует регулярные выражения ... но в 99,999% случаев разница действительно не имеет значения!
источник
Самым простым решением, которое я могу придумать, является этот метод, который возвращает измененный URI. Я чувствую, что большинство из вас работает слишком усердно.
источник
Хорошо, здесь я сравниваю две функции, одна из которых сделана мной (regExp), а другая - аннакатой.
Сплит массив:
Метод регулярных выражений:
Тестовый случай:
Кажется, что даже при самом простом решении (когда регулярное выражение использует только test и не входит в функцию .replace), оно все равно медленнее, чем расщепление ... Хорошо. Regexp довольно медленный, но ... э-э ...
источник
Вот что я делаю. Используя мою функцию editParams (), вы можете добавить, удалить или изменить любой параметр, а затем использовать встроенную функцию replaceState () для обновления URL:
источник
Насколько я могу сказать, ни один из приведенных выше ответов не относится к случаю, когда строка запроса содержит параметры, которые сами являются массивом и, следовательно, будут появляться более одного раза, например:
Следующая функция - это то, что я написал для обновления
document.location.search
. Он принимает массив парных пар ключ / значение в качестве аргумента и возвращает пересмотренную версию последней, с которой вы можете делать все, что захотите. Я использую это так:Если текущий URL был:
http://example.com/index.php?test=replaceme&sizes[]=XL
Это поможет вам
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
функция
источник
Попробуйте
регулярные выражения, так медленно, таким образом:
Пример:
источник
С новыми достижениями в JS вот как можно добавить параметр запроса к URL:
Также увидеть эту возможность Moziila URLSearchParams.append ()
источник
Это будет работать во всех современных браузерах.
источник
Сбросить всю строку запроса
источник