2017-11-09 4 views
-1

Ich habe eine Eingabe, in der der Benutzer eine gültige URL eingibt. Ich muss die URL, Abfragezeichenfolge (wenn der Benutzer eingibt) und Hash (wenn der Benutzer eingibt) alle separat abrufen.Get URL, Abfragezeichenfolge und Hash-Werte

Bisher habe ich dies getan:

var url = input_value.split('?')[0]; //get url 
    var qs = input_value.split('?')[1].split('#')[0]; //get query string value 
    var hash = input_value.split('#')[1]; //get hash value 

Wenn jedoch der Benutzer keine Query-String eingibt, nur Hash-Wert, es wirft einen undefinierten Fehler.

http://test.com/some-thing/ref?v1=obscurecode&something&else#1234

Also für die URL sollte es zurück: http://test.com/some-thing/ref

Abfragestring: ?v1=obscurecode&something&else

Hash: #1234

+1

Ich glaube, ich es gelöst. Willst du meine Lösung ausprobieren? Und dafür brauchst du jQuery nicht. Das ist nur JavaScript. – Soolie

Antwort

0

Es wäre immer besser, einen try und catch Block zu verwenden.

try { 
    var url = input_value.split('?')[0]; //get url 
} catch (e) { 
    var url = input_value; 
} 
try { 
    var qs = input_value.split('?')[1].split('#')[0]; //get query string value 
} catch (e) { 
    var qs = ""; 
} 
try { 
    var hash = input_value.split('#')[1]; //get hash value 
} catch (e) { 
    var hash = ""; 
} 

Dies wird Ihnen helfen, alle abgefangene Typ Fehler zu vermeiden. Ich habe url = input_value verwendet, falls es keine Abfragezeichenfolge gibt.

Konsolenausgabe

console

Und das ist für Ihren Anwendungsfall:

use case

+0

In Ihrer Konsole wird der Hash nicht definiert angezeigt, wenn er nicht eingegeben wurde. – input

+1

Ich stimme nicht HARD auf den Versuch, Blöcke zu fangen .. es macht Javascript noch langsamer und ahrder zu lesen. Überprüfen Sie besser die Länge der Teilung, bevor Sie ein Element aus dem Array erhalten. WAY bessere Praxis, um Ihre eigene Validierung statt Versuch/fangen – Nebulosar

+0

@Nebulosar Sicher ... – Soolie

Verwandte Themen