Pregunta ¿Cómo obtener el valor de los parámetros GET?


Tengo una URL con algunos parámetros GET de la siguiente manera:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

Necesito obtener todo el valor de c. Traté de leer la URL, pero solo obtuve m2. ¿Cómo hago esto usando JavaScript?


925
2018-06-11 08:32


origen


Respuestas:


JavaScript en sí no tiene nada incorporado para manejar los parámetros de cadena de consulta.

En un navegador (moderno) puede usar URL objeto;

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);


Para navegadores antiguos (incluido Internet Explorer), puede usar este polyfill o el código de la versión original de esta respuesta que precede URL:

Podrías acceder location.search, que te daría de la ? carácter al final de la URL o el inicio del identificador de fragmento (#foo), lo que ocurra primero.

Entonces puedes analizarlo con esto:

function parse_query_string(query) {
  var vars = query.split("&");
  var query_string = {};
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    var key = decodeURIComponent(pair[0]);
    var value = decodeURIComponent(pair[1]);
    // If first entry with this name
    if (typeof query_string[key] === "undefined") {
      query_string[key] = decodeURIComponent(value);
      // If second entry with this name
    } else if (typeof query_string[key] === "string") {
      var arr = [query_string[key], decodeURIComponent(value)];
      query_string[key] = arr;
      // If third or later entry with this name
    } else {
      query_string[key].push(decodeURIComponent(value));
    }
  }
  return query_string;
}

var query_string = "a=1&b=3&c=m2-m3-m4-m5";
var parsed_qs = parse_query_string(query_string);
console.log(parsed_qs.c);

Puede obtener la cadena de consulta de la URL de la página actual con:

var query = window.location.search.substring(1);
var qs = parse_query_string(query);

1227
2018-06-11 08:37



La mayoría de las implementaciones que he visto pierden URL, decodificando los nombres y los valores.

Aquí hay una función de utilidad general que también hace una decodificación de URL adecuada:

function getQueryParams(qs) {
    qs = qs.split('+').join(' ');

    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }

    return params;
}

//var query = getQueryParams(document.location.search);
//alert(query.foo);

225
2017-07-08 18:04



fuente

function gup( name, url ) {
    if (!url) url = location.href;
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( url );
    return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')

204
2018-06-11 08:38



Esta es una manera fácil de verificar solo un parámetro:

URL de ejemplo:

    http://myserver/action?myParam=2

Ejemplo de Javascript:

    var myParam = location.search.split('myParam=')[1]

si "myParam" existe en la variable URL ... myParam contendrá "2", de lo contrario no estará definido.

Tal vez quieras un valor predeterminado, en ese caso:

    var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';

Actualizar: Esto funciona mejor:

    var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
    var captured = /myParam=([^&]+)/.exec(url)[1]; // Value is in [1] ('384' in our case)
    var result = captured ? captured : 'myDefaultValue';

Y funciona bien incluso cuando la URL está llena de parámetros.


167
2017-12-02 19:19



Los vendedores de navegadores han implementado una forma nativa de hacerlo a través de URL y URLSearchParams.

let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c'));  // outputs "m2-m3-m4-m5"

Actualmente compatible con Firefox, Opera, Safari y Chrome. Con soporte Edge próximamente.

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL

https://url.spec.whatwg.org/

Eric Bidelman, un ingeniero en Google, recomienda usando esto polyfill para navegadores no compatibles.


83
2018-02-18 17:52



Puede obtener la cadena de consulta en location.search, entonces puedes dividir todo después del signo de interrogación:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i++) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Now you can get the parameters you want like so:
var abc = params.abc;

74
2018-06-11 08:37



Encontré esto hace siglos, muy fácil:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

Entonces llámalo así:

var fType = getUrlVars()["type"];

69
2017-11-20 14:01



Escribí una solución más simple y elegante.

var arr = document.URL.match(/room=([0-9]+)/)
var room = arr[1];

32
2017-10-14 23:03