2009-05-06 21 views

Respuesta

151

Todos los datos están disponibles bajo

window.location.search 

hay que analizar la cadena, por ejemplo.

function get(name){ 
    if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) 
     return decodeURIComponent(name[1]); 
} 

acaba de llamar a la función de obtener el nombre de variable como parámetro, por ejemplo.

get('foo'); 

esta función devolverá el valor de las variables o indefinido si la variable no tiene valor o no existe

+0

Este código no debe decodificar URL? –

+0

@Daniel Silveira: sí, podría/debería decodificar el valor (y codificar el nombre). Editaré mi publicación en pocos minutos – Rafael

+0

¿No es mejor solo dar un solo fragmento de código? –

1

Usted puede analizar la URL de la página actual para obtener los parámetros GET. La URL se puede encontrar usando location.href.

+0

Nota que esto no es del todo confiable, ya que el servidor puede haberte redirigido a otro lugar. Pero es lo mejor que puedes hacer. –

5

Usted puede utilizar el URL para adquirir las variables GET. En particular, window.location.search da todo después (e incluyendo) el '?'. Puede leer más sobre window.location here.

34

Usted podría utilizar jquery.url lo hice así:

var xyz = jQuery.url.param("param_in_url"); 

Check the source code

Fuente Actualizado: https://github.com/allmarkedup/jQuery-URL-Parser

+0

Gran respuesta, pero su enlace está muerto –

+0

@Adam, parece que sí. Creo que esta es la URL actualizada: https://github.com/allmarkedup/jQuery-URL-Parser Una búsqueda en google sobre Mark Perkins jquery.url me llevó a una actualización. Tengo la fuente de cuando publiqué esta respuesta si la necesita. – Kaos

+2

Entonces, ¿se requiere un complemento? – JohnK

10

sólo para poner mi granito de arena en, si desea un objeto que contiene todas las solicitudes

function getRequests() { 
    var s1 = location.search.substring(1, location.search.length).split('&'), 
     r = {}, s2, i; 
    for (i = 0; i < s1.length; i += 1) { 
     s2 = s1[i].split('='); 
     r[decodeURIComponent(s2[0]).toLowerCase()] = decodeURIComponent(s2[1]); 
    } 
    return r; 
}; 

var QueryString = getRequests(); 

//if url === "index.html?test1=t1&test2=t2&test3=t3" 
console.log(QueryString["test1"]); //logs t1 
console.log(QueryString["test2"]); //logs t2 
console.log(QueryString["test3"]); //logs t3 

Nota, la clave para cada parámetro se obtiene es ajustado a minúscula. Entonces, hice una función auxiliar. Entonces ahora es insensible a mayúsculas y minúsculas.

function Request(name){ 
    return QueryString[name.toLowerCase()]; 
} 
+1

Realmente me gusta este método. +1 – BenRacicot

0

Un mapa-reducir solución:

var urlParams = location.search.split(/[?&]/).slice(1).map(function(paramPair) { 
     return paramPair.split(/=(.+)?/).slice(0, 2); 
    }).reduce(function (obj, pairArray) {    
     obj[pairArray[0]] = pairArray[1]; 
     return obj; 
    }, {}); 

Uso:

For url: http://example.com?one=1&two=2 
console.log(urlParams.one) // 1 
console.log(urlParams.two) // 2 
+0

¿Podría abordar por qué usaría una solución de mapa-reducción para esto? Por lo que yo entiendo, map-reduce es eficiente cuando se manejan grandes conjuntos de datos. Como esto es solo una solicitud de HTTP, no veo el sentido de usar una solución de reducción de mapas. – JorgeGRC

3

Hoy en día lo que necesitaba para obtener parámetros de la petición de la página en una matriz asociativa por lo que poner juntos los siguientes, con un poco de helpmyfriends. También maneja parámetros sin un = como true.

con un ejemplo:

// URL: http://www.example.com/test.php?abc=123&def&xyz=&something%20else 

var _GET = (function() { 
    var _get = {}; 
    var re = /[?&]([^=&]+)(=?)([^&]*)/g; 
    while (m = re.exec(location.search)) 
     _get[decodeURIComponent(m[1])] = (m[2] == '=' ? decodeURIComponent(m[3]) : true); 
    return _get; 
})(); 

console.log(_GET); 
> Object {abc: "123", def: true, xyz: "", something else: true} 
console.log(_GET['something else']); 
> true 
console.log(_GET.abc); 
> 123 
0

La función devuelve el parámetro aquí por su nombre. Con pequeños cambios, podrá devolver url base, parámetro o ancla.

function getUrlParameter(name) { 
    var urlOld   = window.location.href.split('?'); 
    urlOld[1]   = urlOld[1] || ''; 
    var urlBase   = urlOld[0]; 
    var urlQuery  = urlOld[1].split('#'); 
    urlQuery[1]   = urlQuery[1] || ''; 
    var parametersString = urlQuery[0].split('&'); 
    if (parametersString.length === 1 && parametersString[0] === '') { 
     parametersString = []; 
    } 
    // console.log(parametersString); 
    var anchor   = urlQuery[1] || ''; 

    var urlParameters = {}; 
    jQuery.each(parametersString, function (idx, parameterString) { 
     paramName = parameterString.split('=')[0]; 
     paramValue = parameterString.split('=')[1]; 
     urlParameters[paramName] = paramValue; 
    }); 
    return urlParameters[name]; 
} 
2

pruebe el siguiente código, le ayudará a obtener los parámetros GET de la url. for more details.

var url_string = window.location.href; // www.test.com?filename=test 
    var url = new URL(url_string); 
    var paramValue = url.searchParams.get("filename"); 
    alert(paramValue) 
Cuestiones relacionadas