En una aplicación web que utiliza llamadas AJAX, necesito enviar una solicitud pero agregar un parámetro al final de la URL, por ejemplo:
URL original:
URL resultante:
http: //server/myapp.php? id = 10 & enabled = true
Buscando una función de JavaScript que analice la URL mirando cada parámetro, luego agrega el nuevo parámetro o actualiza el valor si ya existe uno.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
fuente
fuente
Respuestas:
Una implementación básica que deberá adaptar se vería así:
Esto es aproximadamente el doble de rápido que una expresión regular o una solución basada en la búsqueda, pero eso depende completamente de la longitud de la cadena de consulta y el índice de cualquier coincidencia
El método de expresión regular lenta que comparé con el de las terminaciones (aprox. + 150% más lento)
fuente
encodeURIComponent
lugar deencodeURI
? De lo contrario, cualquier carácter como=
,&
en su nombre o valor, dañará el URI.Puedes usar uno de estos:
Ejemplo:
fuente
XML
parahttp://foo.bar/?x=1&y=2
que el resultado final seahttp://foo.bar/?x=1&y=2&XML
. es posible? Lo intentéurl.searchParams.set('XML');
,url.searchParams.set('XML', null);
yurl.searchParams.set('XML', undefined);
- pero ninguno funcionó en Chrome 63 .Gracias a todos por su contribución. Solía annakata código y modifica para incluir también el caso en que no hay ninguna cadena de consulta en la url en absoluto. Espero que esto ayude.
fuente
escape(key)
yescape(value)
paraencodeURIComponent
la función.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
Esta es una solución muy simple. No controla la existencia de parámetros y no cambia el valor existente. Agrega su parámetro al final, para que pueda obtener el último valor en su código de fondo.
fuente
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
.Aquí hay una versión muy simplificada, que hace concesiones por la legibilidad y menos líneas de código en lugar de un rendimiento micro optimizado (y estamos hablando de una diferencia de unos pocos milisegundos, de manera realista ... debido a la naturaleza de esto (operando en la ubicación del documento actual) ), lo más probable es que se ejecute una vez en una página).
Entonces usarías esto así:
fuente
[\?&]
con([\?&])
en la expresión regular (que acababa de editar yo mismo, pero no estoy seguro de si la política comunitaria permite corregir errores en las respuestas).Y tenga en cuenta que los parámetros deben codificarse antes de agregarse en la cadena de consulta.
http://jsfiddle.net/48z7z4kx/
fuente
http://abc.def/?a&b&b
)..set primer grupo es la clave, el segundo es el valor.
fuente
Tengo una 'clase' que hace esto y aquí está:
He anulado el método toString, por lo que no es necesario llamar a QS :: getQueryString, puede usar QS :: toString o, como lo he hecho en los ejemplos, simplemente confiar en que el objeto se coaccione en una cadena.
fuente
Si tiene una cadena con url que desea decorar con un parámetro, puede intentar esto:
Esto significa que ? será el prefijo del parámetro, pero si ya lo tienes ? en
urlstring
, que & será el prefijo.También recomendaría hacerlo
encodeURI( paramvariable )
si no codificó el parámetro, pero está dentro de aparamvariable
; o si tienes personajes divertidos.Ver codificación de URL de JavaScript para el uso de la
encodeURI
función.fuente
Esta es una manera simple de agregar un parámetro de consulta:
Y eso es todo más aquí .
Tenga en cuenta las especificaciones de soporte .
fuente
Echa un vistazo a https://github.com/derek-watson/jsUri
Uri y manipulación de cadenas de consulta en javascript.
Este proyecto incorpora la excelente biblioteca de expresión regular parseUri de Steven Levithan. Puede analizar de forma segura las URL de todas las formas y tamaños, sin importar si son inválidas u horribles.
fuente
En algún momento vemos
?
al final de la URL, encontré algunas soluciones que generan resultados comofile.php?&foo=bar
. ¡Se me ocurrió mi propia solución que funciona perfectamente como quiero!Nota: location.origin no funciona en IE, aquí está su solución .
fuente
La siguiente función lo ayudará a agregar, actualizar y eliminar parámetros ao desde la URL.
// ejemplo1y
// ejemplo2
// ejemplo3
// ejemplo4
// ejemplo5
Aquí está la función.
fuente
Este fue mi propio intento, pero usaré la respuesta de annakata, ya que parece mucho más limpia:
Además, encontré este complemento jQuery de otra publicación en stackoverflow, y si necesita más flexibilidad, puede usarlo: http://plugins.jquery.com/project/query-object
Creo que el código sería (no lo he probado):
fuente
Agregando a la respuesta de @ Vianney https://stackoverflow.com/a/44160941/6609678
Podemos importar el módulo URL incorporado en el nodo de la siguiente manera
Ejemplo:
Enlaces útiles:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
fuente
Prueba esto.
fuente
url.searchParams
es la lista de parámetros preinicializados para eseURL
objeto.Me gusta la respuesta de Mehmet Fatih Yıldız, incluso él no respondió toda la pregunta.
En la misma línea que su respuesta, uso este código:
"No controla la existencia de parámetros, y no cambia el valor existente. Agrega su parámetro al final"
y el probador:
fuente
Iría con esta biblioteca pequeña pero completa para manejar URL en js:
https://github.com/Mikhus/jsurl
fuente
Esto es lo que uso cuando se trata de algunas adiciones o actualizaciones básicas de parámetros de URL en el lado del servidor como Node.js.
CoffeScript:
JavaScript:
fuente
La solución más fácil, funciona si ya tienes una etiqueta o no, y la elimina automáticamente para que no siga agregando etiquetas iguales, diviértete
LUEGO
fuente
La respuesta de Vianney Bajart es correcta; sin embargo, la URL solo funcionará si tiene la URL completa con puerto, host, ruta y consulta:
Y URLSearchParams solo funcionará si pasa solo la cadena de consulta:
Si tiene una URL incompleta o relativa y no le importa la URL base, puede dividirse por
?
para obtener la cadena de consulta y unirse más tarde de esta manera:No es compatible con Internet Explorer.
fuente
var u = new URL(window.location), usp = u.searchParams;
, no tiene que usar ninguna división elegante de cadenas.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Si estás jugando con URL en enlaces o en otro lugar, es posible que también tengas que tener en cuenta el hash. Aquí hay una solución bastante simple de entender. Probablemente no sea el MÁS RÁPIDO ya que usa una expresión regular ... pero en el 99.999% de los casos, ¡la diferencia realmente no importa!
fuente
La solución más simple que se me ocurre es este método, que devolverá el URI modificado. Siento que la mayoría de ustedes está trabajando demasiado duro.
fuente
Ok, aquí comparo dos funciones, una hecha por mí (regExp) y otra hecha por (annakata).
Matriz dividida:
Método Regexp:
Caso de prueba:
Parece que incluso con la solución más simple (cuando regexp usa solo la prueba y no ingresa a la función .replace) aún es más lento que la división ... Bueno. Regexp es un poco lento pero ... uhh ...
fuente
Esto es lo que hago. Usando mi función editParams (), puede agregar, eliminar o cambiar cualquier parámetro, luego usar la función incorporada replaceState () para actualizar la URL:
fuente
Lo mejor que puedo decir es que ninguna de las respuestas anteriores aborda el caso en el que la cadena de consulta contiene parámetros que son en sí mismos una matriz y, por lo tanto, aparecerán más de una vez, por ejemplo:
La siguiente función es lo que escribí para actualizar
document.location.search
. Toma una matriz de matrices de pares clave / valor como argumento y devolverá una versión revisada de esta última con la que puede hacer lo que quiera. Lo estoy usando así:Si la url actual era:
http://example.com/index.php?test=replaceme&sizes[]=XL
Esto te atraparía
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Función
fuente
Pruebe
las expresiones regulares, tan lentas, por lo tanto:
Ejemplo:
fuente
Con los nuevos logros en JS, así es como se puede agregar el parámetro de consulta a la URL:
También vea esta posibilidad Moziila URLSearchParams.append ()
fuente
Esto funcionará en todos los navegadores modernos.
fuente
Restablecer toda la cadena de consulta
fuente