Analyse chaîne de requête en JavaScript [dupliquer]

Double Possible:

Comment puis-je obtenir des valeurs de chaîne de requête?

je dois analyser la chaîne de requête www.mysite.com/default.aspx?dest=aboutus.aspx . Comment puis-je obtenir la variable dest en JavaScript?

290
demandé sur Community 2010-01-19 04:49:36
la source

12 ответов

voici un moyen rapide et facile d'analyser les chaînes de requête en JavaScript:

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == variable) {
            return decodeURIComponent(pair[1]);
        }
    }
    console.log('Query variable %s not found', variable);
}

maintenant faire une demande à page.le html?x=Bonjour :

console.log(getQueryVariable('x'));
276
répondu Tarik 2017-06-16 22:02:53
la source
function parseQuery(queryString) {
    var query = {};
    var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('=');
        query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
    }
    return query;
}

transforme la chaîne de requête comme hello=1&another=2 en objet {hello: 1, another: 2} . De là, il est facile d'extraire la variable dont vous avez besoin.

cela dit, il ne traite pas des cas de tableaux tels que "hello=1&hello=2&hello=3" . Pour travailler avec cela, vous devez vérifier si une propriété de l'objet que vous faites existe avant de l'ajouter, et transformer la valeur de celui-ci en un tableau, poussant n'importe quels bits supplémentaires.

118
répondu Raivo Fishmeister 2017-10-18 17:57:40
la source

vous pouvez également utiliser l'excellent URI.js bibliothèque Rodney Rehm . Voici comment: -

var qs = URI('www.mysite.com/default.aspx?dest=aboutus.aspx').query(true); // == { dest : 'aboutus.aspx' }
    alert(qs.dest); // == aboutus.aspx

et pour analyser la chaîne de requête de la page actuelle: -

var $_GET = URI(document.URL).query(true); // ala PHP
    alert($_GET['dest']); // == aboutus.aspx 
55
répondu Salman Abbas 2012-05-17 02:15:27
la source

moi aussi! http://jsfiddle.net/drzaus/8EE8k /

(Note: sans vérification emboîtée ou en double)

deparam = function (querystring) {
  // remove any preceding url and split
  querystring = querystring.substring(querystring.indexOf('?')+1).split('&');
  var params = {}, pair, d = decodeURIComponent;
  // march and parse
  for (var i = querystring.length - 1; i >= 0; i--) {
    pair = querystring[i].split('=');
    params[d(pair[0])] = d(pair[1] || '');
  }

  return params;
};//--  fn  deparam

et essais:

var tests = {};
tests["simple params"] = "ID=2&first=1&second=b";
tests["full url"] = "http://blah.com/?" + tests["simple params"];
tests['just ?'] = '?' + tests['simple params'];

var $output = document.getElementById('output');
function output(msg) {
  $output.innerHTML += "\n" + Array.prototype.slice.call(arguments, 0).join("\n");
}
$.each(tests, function(msg, test) {
  var q = deparam(test);
  // prompt, querystring, result, reverse
  output(msg, test, JSON.stringify(q), $.param(q));
  output('-------------------');
});

résultats dans:

simple params
ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------
full url
http://blah.com/?ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------
just ?
?ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------
21
répondu drzaus 2016-10-24 21:46:55
la source

voici ma version basée vaguement sur la version de Braceyard ci-dessus, mais en passant dans un "dictionnaire" et le soutien pour la recherche args sans'='. À utiliser dans mon JQuery $(document).prêt() fonction. Les arguments sont stockés sous forme de couples clé/valeur dans argsParsed, que vous pourriez vouloir sauvegarder quelque part...

'use strict';

function parseQuery(search) {

    var args = search.substring(1).split('&');

    var argsParsed = {};

    var i, arg, kvp, key, value;

    for (i=0; i < args.length; i++) {

        arg = args[i];

        if (-1 === arg.indexOf('=')) {

            argsParsed[decodeURIComponent(arg).trim()] = true;
        }
        else {

            kvp = arg.split('=');

            key = decodeURIComponent(kvp[0]).trim();

            value = decodeURIComponent(kvp[1]).trim();

            argsParsed[key] = value;
        }
    }

    return argsParsed;
}

parseQuery(document.location.search);
19
répondu Henry Rusted 2015-10-26 23:27:00
la source

suite à mon commentaire à la réponse @bobby posté, voici le code que je voudrais utiliser:

    function parseQuery(str)
        {
        if(typeof str != "string" || str.length == 0) return {};
        var s = str.split("&");
        var s_length = s.length;
        var bit, query = {}, first, second;
        for(var i = 0; i < s_length; i++)
            {
            bit = s[i].split("=");
            first = decodeURIComponent(bit[0]);
            if(first.length == 0) continue;
            second = decodeURIComponent(bit[1]);
            if(typeof query[first] == "undefined") query[first] = second;
            else if(query[first] instanceof Array) query[first].push(second);
            else query[first] = [query[first], second]; 
            }
        return query;
        }

ce code prend le querystring fourni (comme 'str') et renvoie un objet. La chaîne est divisée sur toutes les occurences de&, Résultant en un tableau. le tableau est ensuite travsersed et chaque élément est séparé par "=". Il en résulte des sous-tableaux dans lesquels le 0ème élément est le paramètre et le 1er élément est la valeur (ou indéfini si no = signe). Ce sont mapped to object properties, ainsi par exemple la chaîne "hello=1&another=2 & something" est transformée en:

{
hello: "1",
another: "2",
something: undefined
}

de plus, ce code Note les répétitions telles que "hello=1&hello=2" et convertit le résultat en un tableau, par exemple:

{
hello: ["1", "2"]
}

vous remarquerez aussi qu'il traite des cas dans lesquels le signe = n'est pas utilisé. Il ignore également s'il y a un signe égal juste après un & symbole.

un peu exagéré pour le question originale, mais une solution réutilisable si vous avez besoin de travailler avec querystrings en javascript:)

13
répondu jsdw 2012-12-16 02:09:03
la source

Si vous savez que vous n'avez qu'une seule variable querystring vous pouvez tout simplement faire:

var dest = location.search.replace(/^.*?\=/, '');
7
répondu CB01 2012-06-12 18:28:50
la source

la fonction suivante analysera la chaîne de recherche avec une expression régulière, cachera le résultat et retournera la valeur de la variable demandée:

window.getSearch = function(variable) {
  var parsedSearch;
  parsedSearch = window.parsedSearch || (function() {
    var match, re, ret;
    re = /\??(.*?)=([^\&]*)&?/gi;
    ret = {};
    while (match = re.exec(document.location.search)) {
      ret[match[1]] = match[2];
    }
    return window.parsedSearch = ret;
  })();
  return parsedSearch[variable];
};

vous pouvez soit l'appeler une fois sans aucun paramètre et travailler avec l'objet window.parsedSearch , soit appeler getSearch par la suite. Je n'ai pas entièrement testé, l'expression régulière peut encore besoin de quelques ajustements...

7
répondu amiuhle 2015-07-24 12:38:49
la source

je voulais une fonction simple qui prenait une URL comme entrée et renvoyait une carte des paramètres de la requête. Si je devais améliorer cette fonction, je soutiendrais la norme pour les données de tableau dans L'URL, et ou variables imbriquées.

cela devrait fonctionner en arrière et pour avec le jQuery.fonction param (qparams).

function getQueryParams(url){
    var qparams = {},
        parts = (url||'').split('?'),
        qparts, qpart,
        i=0;

    if(parts.length <= 1 ){
        return qparams;
    }else{
        qparts = parts[1].split('&');
        for(i in qparts){

            qpart = qparts[i].split('=');
            qparams[decodeURIComponent(qpart[0])] = 
                           decodeURIComponent(qpart[1] || '');
        }
    }

    return qparams;
};
5
répondu jdavid.net 2012-12-21 08:49:48
la source

et ça?

function getQueryVar(varName){
    // Grab and unescape the query string - appending an '&' keeps the RegExp simple
    // for the sake of this example.
    var queryStr = unescape(window.location.search) + '&';

    // Dynamic replacement RegExp
    var regex = new RegExp('.*?[&\?]' + varName + '=(.*?)&.*');

    // Apply RegExp to the query string
    val = queryStr.replace(regex, "");

    // If the string is the same, we didn't find a match - return false
    return val == queryStr ? false : val;
}

..puis il suffit de l'appeler avec:

alert('Var "dest" = ' + getQueryVar('dest'));

Cheers

2
répondu Madbreaks 2012-04-17 00:51:29
la source

je voulais ramasser spécifique liens à l'intérieur d'un élément du DOM sur une page, envoyer les utilisateurs vers une page de redirection sur un minuteur, puis passe sur l'origine cliqué sur l'URL. C'est ainsi que je l'ai fait en utilisant javascript régulier incorporant l'une des méthodes ci-dessus.

Page avec liens: Head

  function replaceLinks() {   
var content = document.getElementById('mainContent');
            var nodes = content.getElementsByTagName('a');
        for (var i = 0; i < document.getElementsByTagName('a').length; i++) {
            {
                href = nodes[i].href;
                if (href.indexOf("thisurl.com") != -1) {

                    nodes[i].href="http://www.thisurl.com/redirect.aspx" + "?url=" + nodes[i];
                    nodes[i].target="_blank";

                }
            }
    }
}

corps

<body onload="replaceLinks()">

page de Redirection Tête

   function getQueryVariable(variable) {
        var query = window.location.search.substring(1);
        var vars = query.split('&');
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split('=');
            if (decodeURIComponent(pair[0]) == variable) {
                return decodeURIComponent(pair[1]);
            }
        }
        console.log('Query variable %s not found', variable);
    }
    function delayer(){
        window.location = getQueryVariable('url')
    }

corps

<body onload="setTimeout('delayer()', 1000)">
2
répondu bobby 2012-11-21 20:50:02
la source

regarder cette solution . En utilisant sa fonction, vous ne pouvez pas appeler gup('dest') pour saisir le paramètre dest .

0
répondu Gert Grenander 2010-06-12 07:29:28
la source

Autres questions sur javascript parsing query-string