1735 Stimmen

Holen Sie die Werte aus den "GET"-Parametern (JavaScript)

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 gesamten Wert von c erhalten. Ich habe versucht, die URL zu lesen, aber ich habe nur m2 erhalten. Wie mache ich das mit JavaScript?

9 Stimmen

Bevor Sie eine neue Antwort posten, bedenken Sie bitte, dass es bereits 50+ Antworten auf diese Frage gibt. Stellen Sie bitte sicher, dass Ihre Antwort Informationen enthält, die nicht unter den vorhandenen Antworten zu finden sind.

0 Stimmen

Var url_string = "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);

1 Stimmen

Es ist verrückt, dass eine, was sollte sein, einfache Frage für JS 50+ Antworten erfordert :/

2682voto

Quentin Punkte 850700

JavaScript selbst hat nichts eingebaut, um Abfragezeichenfolgenparameter zu behandeln.

Code, der in einem (modernen) Browser ausgeführt wird, kann das URL-Objekt (eine Web-API) verwenden. URL wird auch von Node.js implementiert:

//  Du kannst url_string von window.location.href erhalten, wenn du mit
// der URL der aktuellen Seite arbeiten möchtest
var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; 
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);

Für ältere Browser (einschließlich Internet Explorer) kannst du diesen Polyfill verwenden.

Du könntest auch einen für URLSearchParams verwenden und die Abfragezeichenfolge mit window.location.search.substring(1) extrahieren, um sie zu übergeben.


Du könntest auch den Code aus der Originalversion dieser Antwort verwenden, der URL vorausgeht. Der obige Polyfill ist robust und gut getestet, und ich empfehle ihn dringend gegenüber diesem.

Du könntest auf location.search zugreifen, was dir vom ?-Zeichen bis zum Ende der URL oder zum Beginn des Fragmentidentifikators (#foo), je nachdem, was zuerst kommt, geben würde.

Dann kannst du es so parsen:

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.shift());
    var value = decodeURIComponent(pair.join("="));
    // Wenn der erste Eintrag mit diesem Namen ist
    if (typeof query_string[key] === "undefined") {
      query_string[key] = value;
      // Wenn der zweite Eintrag mit diesem Namen ist
    } else if (typeof query_string[key] === "string") {
      var arr = [query_string[key], value];
      query_string[key] = arr;
      // Wenn der dritte oder spätere Eintrag mit diesem Namen ist
    } else {
      query_string[key].push(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);

Du kannst die Abfragezeichenfolge von der URL der aktuellen Seite erhalten mit:

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

0 Stimmen

Für ältere Browser benötigen Sie möglicherweise ein Polyfill für URL zusätzlich zu dem für URLSearchParams. Oder Sie können dieses Problem umgehen, indem Sie die Zeile var c = url.searchParams.get("c"); in der obigen Antwort durch var c = new URLSearchParams(window.location.search).get("c"); ersetzen.

13 Stimmen

@Jamland - Auf keinen Fall machen Sie das. Es wird Dinge zerbrechen. Hier ist eine Live-Demo new URL() erwartet, dass ihm eine ordnungsgemäß codierte URL als Argument übergeben wird. decodeURIComponent erwartet, dass ihm ein Bestandteil einer URL übergeben wird, nicht die ganze URL.

0 Stimmen

@Quentin Ich habe verschiedene Sonderzeichen überprüft und sehe, dass du recht hast. decodeURIComponent sollte in diesem Fall nicht verwendet werden.

269voto

Ates Goral Punkte 132294

Die meisten Implementierungen, die ich gesehen habe, vergessen es, die Namen und Werte zu URL-decodieren.

Hier ist eine allgemeine Hilfsfunktion, die auch ordnungsgemäßes URL-Decodieren 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);

5 Stimmen

Dieser Code funktioniert nicht. Es erzeugt eine Endlosschleife, weil der Regex im Schleifendefinition kompiliert wird, was den aktuellen Index zurücksetzt. Es funktioniert ordnungsgemäß, wenn Sie den Regex außerhalb der Schleife in eine Variable setzen.

4 Stimmen

@maxhawkins: Es funktioniert in einigen Browsern, während es in anderen in einer Endlosschleife landen würde. Du hast damit teilweise recht. Ich werde den Code reparieren, damit er plattformübergreifend funktioniert. Vielen Dank für den Hinweis!

0 Stimmen

Re = /(\?|\&)([^=]+)=([^&]*)/g; und die Token 2 und 3

261voto

Haim Evgi Punkte 119384

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

9 Stimmen

Ich mag diese Option am liebsten, ziehe es jedoch vor, null zurückzugeben oder das Ergebnis, aber nicht einen leeren String.

2 Stimmen

Es sieht so aus, als ob du einige zusätzliche Escape-Zeichen hast. "\\[" sollte "\[" sein. Da es sich um normale Zeichenketten handelt, müssen [ und ] nicht escaped werden.

0 Stimmen

Dies ist nicht ohne Rücksicht auf Groß- und Kleinschreibung. Wo müsste ich das "i" hinzufügen, um es ohne Rücksicht auf Groß- und Kleinschreibung zu machen?

250voto

mzalazar Punkte 5722

Dies ist ein einfacher Weg, um 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 URL vorhanden ist... wird die Variable myParam "2" enthalten, ansonsten wird sie undefiniert sein.

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

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

Update: Das funktioniert besser:

var url = "http://www.example.com/index.php?myParam=384&login=admin"; // oder window.location.href für aktuelle URL
var captured = /myParam=([^&]+)/.exec(url)[1]; // Wert ist in [1] ('384' in unserem Fall)
var result = captured ? captured : 'myDefaultValue';

Und es funktioniert sogar richtig, wenn die URL voller Parameter ist.

47 Stimmen

Dies funktioniert nur, wenn der Parameter, den Sie abrufen, der letzte in der URL ist, worauf Sie sich nicht verlassen sollten (auch wenn Sie nur einen Parameter erwarten). z.B. http://myserver/action?myParam=2&anotherParam=3 würde nicht "2", sondern "2&anotherParam=3" ergeben.

47 Stimmen

(location.search.split('myParam=')[1]||'').split('&')[0] -- um mit mehreren Parametern oder möglicherweise fehlenden myParam zu verwenden.

2 Stimmen

Oder location.search.split('myParam=').splice(1).join('').split('‌​&')[0]

160voto

cgatian Punkte 20324

Browseranbieter haben eine native Möglichkeit implementiert, 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'));  // gibt "m2-m3-m4-m5" aus

Derzeit unterstützt in Firefox, Opera, Safari, Chrome und Edge. Eine Liste der Browserunterstützung finden Sie hier.

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, dieses Polyfill für nicht unterstützte Browser zu verwenden.

0 Stimmen

Gemäß des MDN-Links unterstützt Safari URL, aber nicht URLSearchParams.

3 Stimmen

@Markouver Kümmert sich nicht das Polyfill darum? Übrigens, Safari ist das IE6 der modernen Tage.

0 Stimmen

Warum gibt new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5")‌​.get('a') für mich null zurück? (Auf Chrome stabil). b und c scheinen gut zu funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X