Question Comment obtenir la valeur des paramètres GET?


J'ai une URL avec quelques paramètres GET comme suit:

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

Je dois obtenir toute la valeur de c. J'ai essayé de lire l'URL, mais j'ai seulement m2. Comment est-ce que je fais cela en utilisant JavaScript?


925
2018-06-11 08:32


origine


Réponses:


JavaScript lui-même n'a rien pour gérer les paramètres de chaîne de requête.

Dans un navigateur (moderne), vous pouvez utiliser le URL objet;

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);


Pour les navigateurs plus anciens (y compris Internet Explorer), vous pouvez utiliser ce polyfill ou le code de la version originale de cette réponse qui est antérieure URL:

Vous pouvez accéder location.search, ce qui vous donnerait de la ? caractère à la fin de l'URL ou au début de l'identificateur de fragment (#foo), selon la première éventualité.

Ensuite, vous pouvez l'analyser avec ceci:

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);

Vous pouvez obtenir la chaîne de requête à partir de l'URL de la page en cours avec:

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

1227
2018-06-11 08:37



La plupart des implémentations que j'ai vues ont raté l'URL décodant les noms et les valeurs.

Voici une fonction d'utilité générale qui effectue également un décodage d'URL correct:

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



la source

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



C'est un moyen facile de vérifier un seul paramètre:

Exemple d'URL:

    http://myserver/action?myParam=2

Exemple Javascript:

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

si "myParam" existe dans l'URL ... la variable myParam contiendra "2", sinon elle sera indéfinie.

Peut-être que vous voulez une valeur par défaut, dans ce cas:

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

Mettre à jour: Cela fonctionne mieux:

    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';

Et cela fonctionne même lorsque l'URL est pleine de paramètres.


167
2017-12-02 19:19



Les fournisseurs de navigateurs ont implémenté une méthode native pour ce faire via l'URL et 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"

Actuellement pris en charge dans Firefox, Opera, Safari et Chrome. Avec le support Edge arrive bientôt.

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, ingénieur chez Google, recommande en utilisant ce polyfill pour les navigateurs non pris en charge.


83
2018-02-18 17:52



Vous pouvez obtenir la chaîne de requête dans location.search, alors vous pouvez tout diviser après le point d'interrogation:

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



Je l'ai trouvé il y a très longtemps, très facile:

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

Puis appelez comme ceci:

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

69
2017-11-20 14:01



J'ai écrit une solution plus simple et élégante.

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

32
2017-10-14 23:03



Voici une solution récursive sans regex, avec une mutation minimale (seul l'objet params est muté, ce qui est inévitable dans JS).

C'est génial parce que:

  • Est récursif
  • Gère plusieurs paramètres du même nom
  • Traite bien les chaînes de paramètres malformées (valeurs manquantes, etc.)
  • Ne casse pas si '=' est dans la valeur
  • Effectue le décodage d'URL
  • Et enfin, c'est génial parce que ... argh !!!

Code:

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Handle multiple parameters of the same name
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Get rid of leading ?
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Finally, to get the param you want
params['c'];

27
2018-01-16 01:42