validacion - ¿Cómo analizo los parámetros de una consulta URL en Javascript?
validar formulario javascript antes de enviar (3)
Hoy (2.5 años después de esta respuesta) puede usar Array.forEach
forma Array.forEach
. Como sugiere @ricosrealm, se utilizó decodeURIComponent
en esta función.
function getJsonFromUrl() {
var query = location.search.substr(1);
var result = {};
query.split("&").forEach(function(part) {
var item = part.split("=");
result[item[0]] = decodeURIComponent(item[1]);
});
return result;
}
en realidad no es tan simple , consulte la revisión por pares en los comentarios, especialmente:
- enrutamiento basado en hash (@cmfolio)
- parámetros de matriz (@ user2368055)
- uso apropiado de decodeURIComponent (@AndrewF)
Tal vez esto debería ir a codereview SE, pero aquí hay un código más seguro y sin expresiones regulares:
function getJsonFromUrl(hashBased) {
var query;
if(hashBased) {
var pos = location.href.indexOf("?");
if(pos==-1) return [];
query = location.href.substr(pos+1);
} else {
query = location.search.substr(1);
}
var result = {};
query.split("&").forEach(function(part) {
if(!part) return;
part = part.split("+").join(" "); // replace every + with space, regexp-free version
var eq = part.indexOf("=");
var key = eq>-1 ? part.substr(0,eq) : part;
var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : "";
var from = key.indexOf("[");
if(from==-1) result[decodeURIComponent(key)] = val;
else {
var to = key.indexOf("]",from);
var index = decodeURIComponent(key.substring(from+1,to));
key = decodeURIComponent(key.substring(0,from));
if(!result[key]) result[key] = [];
if(!index) result[key].push(val);
else result[key][index] = val;
}
});
return result;
}
También reemplacé el espacio no codificado por el de acuerdo con este artículo, que también es una guía útil sobre cómo codificar la adhesión al RFC 3986.
Tenga en cuenta el result[key][index] = val
: se crea un nuevo elemento de matriz, es enumerable, por lo que puede ser iterado por forEach
llamada. Por lo tanto, puedes analizar incluso URL como
var url = "?foo%20e[]=a%20a&foo+e[%5Bx%5D]=b&foo e[]=c";
// {"foo e": ["a a", "c", "[x]":"b"]}
var obj = getJsonFromUrl(url)["foo e"];
for(var key in obj) { // Array.forEach would skip string keys here
console.log(key,":",obj[key]);
}
/*
0 : a a
1 : c
[x] : b
*/
Posible duplicado:
Usa el parámetro get de la url en javascript
Obtener valores de cadena de consulta en JavaScript
En Javascript, ¿cómo puedo obtener los parámetros de una cadena de URL (no la URL actual)?
me gusta:
www.domain.com/?v=123&p=hello
¿Puedo obtener "v" y "p" en un objeto JSON?
Podría obtener un objeto JavaScript que contenga los parámetros con algo como esto:
var regex = /[?&]([^=#]+)=([^&#]*)/g,
url = window.location.href,
params = {},
match;
while(match = regex.exec(url)) {
params[match[1]] = match[2];
}
La expresión regular podría mejorarse bastante. Simplemente busca los pares nombre-valor, separados por =
caracteres, y los pares separados por &
caracteres (o an =
carácter para el primero). Para su ejemplo, lo anterior resultaría en:
{v: "123", p: "hello"}
Aquí hay un ejemplo de trabajo .
var v = window.location.getParameter(''v'');
var p = window.location.getParameter(''p'');
ahora v y p son objetos que tienen 123 y hola en ellos respectivamente