2009-05-02 18 views

Antwort

47
function parseURLParams(url) { 
    var queryStart = url.indexOf("?") + 1, 
     queryEnd = url.indexOf("#") + 1 || url.length + 1, 
     query = url.slice(queryStart, queryEnd - 1), 
     pairs = query.replace(/\+/g, " ").split("&"), 
     parms = {}, i, n, v, nv; 

    if (query === url || query === "") return; 

    for (i = 0; i < pairs.length; i++) { 
     nv = pairs[i].split("=", 2); 
     n = decodeURIComponent(nv[0]); 
     v = decodeURIComponent(nv[1]); 

     if (!parms.hasOwnProperty(n)) parms[n] = []; 
     parms[n].push(nv.length === 2 ? v : null); 
    } 
    return parms; 
} 

Verwenden Sie wie folgt vor:

var urlString = "http://www.foo.com/bar?a=a+a&b%20b=b&c=1&c=2&d#hash"; 
    urlParams = parseURLParams(urlString); 

, die ein ein Objekt wie folgt zurückgibt:

{ 
    "a" : ["a a"],  /* param values are always returned as arrays */ 
    "b b": ["b"],  /* param names can have special chars as well */ 
    "c" : ["1", "2"] /* an URL param can occur multiple times!  */ 
    "d" : [null]  /* parameters without values are set to null */ 
} 

So

parseURLParams("www.mints.com?name=something") 

gibt

{name: ["something"]} 

EDIT: Die original version of this answer einen Regex-basierten Ansatz zum URL-Parsing verwendet. Es verwendete eine kürzere Funktion, aber der Ansatz war fehlerhaft und ich ersetzte ihn durch einen richtigen Parser.

+0

Entschuldigung, ich bin kein professioneller Javascripter! :) –

+0

@Tomalak können Sie mir bitte die Möglichkeit geben, den Wert des Namens zu drucken? Ich versuche dieses Skript zu verwenden und wenn ich document.write (urlParams) verwende; es gibt mir [Objekt Objekt] , aber ich bekomme nicht den tatsächlichen Wert .. Können Sie mir bitte damit helfen? –

+0

@KiranVemuri: Versuchen Sie 'console.log (JSON.stringify (urlParams))' – Daenarys

3

Hier ist eine Lösung. Natürlich muss diese Funktion nicht in eine "window.params" -Option geladen werden, die angepasst werden kann.

window.params = function(){ 
    var params = {}; 
    var param_array = window.location.href.split('?')[1].split('&'); 
    for(var i in param_array){ 
     x = param_array[i].split('='); 
     params[x[0]] = x[1]; 
    } 
    return params; 
}(); 

Beispiel API-Aufruf auf http://www.mints.com/myurl.html?name=something&goal=true:

if(window.params.name == 'something') doStuff(); 
else if(window.params.goal == 'true') shoutGOOOOOAAALLL(); 
5

Ich denke, das sollte auch funktionieren:

function $_GET(q,s) { 
    s = (s) ? s : window.location.search; 
    var re = new RegExp('&amp;'+q+'=([^&amp;]*)','i'); 
    return (s=s.replace(/^\?/,'&amp;').match(re)) ?s=s[1] :s=''; 
} 

Rufen Sie es wie folgt aus:

var value = $_GET('myvariable'); 
1

Iv'e Tomalaks Antwort wurde verbessert/verbessert mit:

  • Stellen Sie ein Array nur bei Bedarf her.
  • Wenn es ein anderes Gleichungssymbol in dem Wert gibt, wird es in den Wert
  • Es verwendet jetzt den location.search Wert anstelle einer URL.
  • Leere Suchzeichenfolge führt zu einem leeren Objekt.

Code:

function getSearchObject() { 
    if (location.search === "") return {}; 

    var o = {}, 
     nvPairs = location.search.substr(1).replace(/\+/g, " ").split("&"); 

    nvPairs.forEach(function (pair) { 
     var e = pair.indexOf('='); 
     var n = decodeURIComponent(e < 0 ? pair : pair.substr(0,e)), 
      v = (e < 0 || e + 1 == pair.length) 
       ? null : 
       decodeURIComponent(pair.substr(e + 1,pair.length - e)); 
     if (!(n in o)) 
      o[n] = v; 
     else if (o[n] instanceof Array) 
      o[n].push(v); 
     else 
      o[n] = [o[n] , v]; 
    }); 
    return o; 
} 
0

ich auch wütend eine ziemlich einfache Funktion. Sie rufen es auf: get ("yourgetname");

und bekommen, was auch immer es war. (jetzt, dass ich es geschrieben habe ich es Ihnen% 26 geben bemerkt, wenn Sie einen & im Wert hatte ..)

function get(name){ 
    var url = window.location.search; 
    var num = url.search(name); 
    var namel = name.length; 
    var frontlength = namel+num+1; //length of everything before the value 
    var front = url.substring(0, frontlength); 
    url = url.replace(front, ""); 
    num = url.search("&"); 

if(num>=0) return url.substr(0,num); 
if(num<0) return url;    
} 
1

Die aktuell gewählte Antwort nicht gut auf allen in meinem Fall nicht funktioniert, was ich fühle, ist eine ziemlich typische. Ich fand die unten stehende Funktion here und es funktioniert super!

function getAllUrlParams(url) { 

    // get query string from url (optional) or window 
    var queryString = url ? url.split('?')[1] : window.location.search.slice(1); 

    // we'll store the parameters here 
    var obj = {}; 

    // if query string exists 
    if (queryString) { 

    // stuff after # is not part of query string, so get rid of it 
    queryString = queryString.split('#')[0]; 

    // split our query string into its component parts 
    var arr = queryString.split('&'); 

    for (var i=0; i<arr.length; i++) { 
     // separate the keys and the values 
     var a = arr[i].split('='); 

     // in case params look like: list[]=thing1&list[]=thing2 
     var paramNum = undefined; 
     var paramName = a[0].replace(/\[\d*\]/, function(v) { 
     paramNum = v.slice(1,-1); 
     return ''; 
     }); 

     // set parameter value (use 'true' if empty) 
     var paramValue = typeof(a[1])==='undefined' ? true : a[1]; 

     // (optional) keep case consistent 
     paramName = paramName.toLowerCase(); 
     paramValue = paramValue.toLowerCase(); 

     // if parameter name already exists 
     if (obj[paramName]) { 
     // convert value to array (if still string) 
     if (typeof obj[paramName] === 'string') { 
      obj[paramName] = [obj[paramName]]; 
     } 
     // if no array index number specified... 
     if (typeof paramNum === 'undefined') { 
      // put the value on the end of the array 
      obj[paramName].push(paramValue); 
     } 
     // if array index number specified... 
     else { 
      // put the value at that index number 
      obj[paramName][paramNum] = paramValue; 
     } 
     } 
     // if param name doesn't exist yet, set it 
     else { 
     obj[paramName] = paramValue; 
     } 
    } 
    } 

    return obj; 
} 
+0

gleich hier, dieses eine Arbeit wie ein Charme – Plastic