Estoy buscando escribir una pieza de javascript que agregará un parámetro a la URL actual y luego actualizará la página. ¿Cómo puedo hacer esto?
Estoy buscando escribir una pieza de javascript que agregará un parámetro a la URL actual y luego actualizará la página. ¿Cómo puedo hacer esto?
Respuestas:
Esto debería funcionar (¡no probado!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Más corto que la respuesta aceptada, haciendo lo mismo, pero manteniéndolo simple:
window.location.search += '¶m=42';
No tenemos que alterar la url completa, solo la cadena de consulta, conocida como el atributo de búsqueda de ubicación.
Cuando asigna un valor al atributo de búsqueda, el navegador inserta automáticamente el signo de interrogación y la página se vuelve a cargar.
window.location.search = '?param=42';
La mayoría de las respuestas aquí sugieren que uno debe agregar los parámetros a la URL, algo así como el siguiente fragmento o una variación similar:
location.href = location.href + "¶meter=" + value;
Esto funcionará bastante bien para la mayoría de los casos.
sin embargo
En mi opinión, esa no es la forma correcta de agregar un parámetro a una URL.
Debido a que el enfoque sugerido no prueba si el parámetro ya está configurado en la URL, si no tiene cuidado, uno puede terminar con una URL muy larga con el mismo parámetro repetido varias veces. es decir:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
en este punto es donde comienzan los problemas. El enfoque sugerido podría y creará una URL muy larga después de varias actualizaciones de página, lo que invalidará la URL. Siga este enlace para obtener más información sobre una URL larga. ¿Cuál es la longitud máxima de una URL en diferentes navegadores?
Este es mi enfoque sugerido:
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
Con esta función solo tendrá que hacer lo siguiente:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
podría introducir una complejidad innecesaria en el código.
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
Más versión compatible
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
Por favor revise el siguiente código:
/*Get current URL*/
var _url = location.href;
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Una pequeña corrección de error para la reflexiva respuesta de @ yeyo arriba.
Cambio:
var parameters = parser.search.split(/\?|&/);
A:
var parameters = parser.search.split(/\?|&/);
Prueba esto
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);