Frage Wie bekomme ich den Wert von den GET-Parametern?


Ich habe eine URL mit einigen GET-Parametern wie folgt:

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

Ich muss den ganzen Wert von bekommen c. Ich habe versucht, die URL zu lesen, aber ich habe nur m2. Wie mache ich das mit JavaScript?


925
2018-06-11 08:32


Ursprung


Antworten:


JavaScript selbst hat nichts eingebaut, um mit Abfrage-String-Parametern umzugehen.

In einem (modernen) Browser können Sie den URL Objekt;

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


Für ältere Browser (einschließlich Internet Explorer) können Sie verwenden diese Polyfill oder der Code aus der ursprünglichen Version dieser Antwort, die älter ist URL:

Du könntest zugreifen location.search, die dir von der ? Zeichen am Ende der URL oder am Anfang der Fragmentkennung (#foo), je nachdem, was zuerst eintritt.

Dann können Sie es damit analysieren:

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

Sie können die Abfragezeichenfolge von der URL der aktuellen Seite abrufen mit:

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

1227
2018-06-11 08:37



Die meisten Implementierungen, die ich gesehen habe, vermissen die URL-Dekodierung der Namen und der Werte.

Hier ist eine allgemeine Dienstprogrammfunktion, die auch eine korrekte URL-Dekodierung durchführt:

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



Quelle

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



Dies ist eine einfache Möglichkeit, nur einen Parameter zu überprüfen:

Beispiel URL:

    http://myserver/action?myParam=2

Beispiel Javascript:

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

Wenn "myParam" in der Variable URL ... enthalten ist, enthält myParam "2", andernfalls ist es undefiniert.

Vielleicht möchten Sie einen Standardwert, in diesem Fall:

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

Aktualisieren: Das funktioniert besser:

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

Und es funktioniert auch dann, wenn die URL voll von Parametern ist.


167
2017-12-02 19:19



Browser-Anbieter haben eine native Möglichkeit eingeführt, dies über URL und URLSearchParams zu tun.

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"

Derzeit in Firefox, Opera, Safari und Chrome unterstützt. Mit Edge-Unterstützung demnächst.

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, ein Ingenieur bei Google, empfiehlt Verwenden Sie dies Polyfill für nicht unterstützte Browser.


83
2018-02-18 17:52



Sie können die Abfragezeichenfolge abrufen location.search, dann kannst du alles nach dem Fragezeichen teilen:

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



Ich fand das vor Ewigkeiten sehr einfach:

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

Dann nenne es so:

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

69
2017-11-20 14:01



Ich habe eine einfachere und elegantere Lösung geschrieben.

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

32
2017-10-14 23:03



Hier ist eine rekursive Lösung, die keine Regex hat und minimale Mutation hat (nur das params-Objekt ist mutiert, was ich in JS für unvermeidlich halte).

Es ist großartig, weil es:

  • Ist rekursiv
  • Verarbeitet mehrere Parameter desselben Namens
  • Passt gut zu fehlerhaften Parameterzeichenfolgen (fehlende Werte usw.)
  • Bricht nicht, wenn '=' im Wert steht
  • Führt URL-Dekodierung durch
  • Und schließlich ist es großartig, weil es ... 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