http://domain.com/page.html?returnurl=%2Fadmin
Pour js
dans page.html
, comment peut-il récupérer les paramètres GET
?
Pour l'exemple simple ci-dessus, func('returnurl')
doit être /admin
Mais cela devrait également fonctionner pour les requêtes complexes ...
Avec l'objet window.location . Ce code vous donne GET sans le point d'interrogation.
window.location.search.substr(1)
De votre exemple, il retournera returnurl=%2Fadmin
EDIT: J'ai pris la liberté de changer réponse de Qwerty , ce qui est vraiment bien , et comme il l'a souligné, j'ai suivi exactement ce que le PO a demandé:
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
J'ai supprimé l'exécution de la fonction dupliquée de son code, en la remplaçant par une variable (tmp) et j'ai également ajouté decodeURIComponent
, exactement comme OP l'a demandé. Je ne sais pas si cela peut ou peut ne pas être un problème de sécurité.
Ou bien avec plain for loop, qui fonctionnera même dans IE8:
function findGetParameter(parameterName) {
var result = null,
tmp = [];
var items = location.search.substr(1).split("&");
for (var index = 0; index < items.length; index++) {
tmp = items[index].split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
}
return result;
}
window.location.search
retournera tout de la? sur. Ce code ci-dessous supprimera le?, Utilisez split pour séparer les tableaux de clés/valeurs, puis affectera les propriétés nommées à l'objet params:
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var params = getSearchParameters();
Vous pouvez ensuite obtenir le paramètre test de http://myurl.com/?test=1
en appelant params.test
.
var queryDict = {}
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
C'est la solution la plus simple . Malheureusement , il ne gère pas les clés à valeurs multiples et les caractères encodés.
"?a=1&a=%2Fadmin&b=2&c=3&d&e"
> queryDict
a: "%2Fadmin" //overriden with last value, not decoded.
b: "2"
c: "3"
d: undefined
e: undefined
Voir la réponse d'origine à l'adresse Comment obtenir des valeurs de chaîne de requête en JavaScript?
"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab&a=%2Fadmin"
> queryDict
a: ["1", "5", "t e x t", "/admin"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
"?returnurl=%2Fadmin"
> qd.returnurl // ["/admin"]
> qd['returnurl'] // ["/admin"]
> qd.returnurl[0] // "/admin"
Hé, voici la bonne réponse pour 2016:
some = new URLSearchParams("https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&q=mdn%20query%20string")
var q = some.get('q') // 'mdn query string'
var ie = some.has('ie') // true
some.append('new','here')
console.log(q)
console.log(ie)
console.log(some)
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParamshttps://polyfill.io/v2/docs/features/
une façon plus élégante de le faire: :)
var options = window.location.search.slice(1)
.split('&')
.reduce(function _reduce (/*Object*/ a, /*String*/ b) {
b = b.split('=');
a[b[0]] = decodeURIComponent(b[1]);
return a;
}, {});
je le fais comme ceci (pour récupérer un paramètre get spécifique, ici 'parameterName'):
var parameterValue = decodeURIComponent(window.location.search.match(/(\?|&)parameterName\=([^&]*)/)[2]);
Celui-ci utilise regex et renvoie null si param n'existe pas ou n'a pas de valeur:
function getQuery(q) {
return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}
Ici, j'ai créé ce code pour transformer les paramètres GET en un objet pour les utiliser plus facilement.
//Get Nav Url
function getNavUrl() {
//Get Url
return window.location.search.replace("?", "");
};
function getParameters(url) {
//Params obj
var params = {};
//To lowercase
url = url.toLowerCase();
//To array
url = url.split('&');
//Iterate over url parameters array
var length = url.length;
for(var i=0; i<length; i++) {
//Create prop
var prop = url[i].slice(0, url[i].search('='));
//Create Val
var value = url[i].slice(url[i].search('=')).replace('=', '');
//Params New Attr
params[prop] = value;
}
return params;
};
//Call To getParameters
console.log(getParameters(getNavUrl()));
var getQueryParam = function(param) {
var found;
window.location.search.substr(1).split("&").forEach(function(item) {
if (param == item.split("=")[0]) {
found = item.split("=")[1];
}
});
return found;
};
Cette solution gère le décodage d'URL:
var params = function() {
function urldecode(str) {
return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = urldecode(tmparr[1]);
}
return params;
}
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}();
Usage:
console.log('someParam GET value is', params['someParam']);
J'ai créé une fonction Javascript simple pour accéder aux paramètres GET à partir d'une URL.
Incluez simplement cette source Javascript et vous pourrez accéder aux paramètres get
. Exemple: dans http://example.com/index.php?language=french , la variable language
est accessible sous la forme $_GET["language"]
. De même, une liste de tous les paramètres sera stockée dans une variable $_GET_Params
sous forme de tableau. Le code Javascript et le code HTML sont fournis dans l'extrait de code suivant:
<!DOCTYPE html>
<html>
<body>
<!-- This script is required -->
<script>
function $_GET() {
// Get the Full href of the page e.g. http://www.google.com/files/script.php?v=1.8.7&country=india
var href = window.location.href;
// Get the protocol e.g. http
var protocol = window.location.protocol + "//";
// Get the Host name e.g. www.google.com
var hostname = window.location.hostname;
// Get the pathname e.g. /files/script.php
var pathname = window.location.pathname;
// Remove protocol part
var queries = href.replace(protocol, '');
// Remove Host part
queries = queries.replace(hostname, '');
// Remove pathname part
queries = queries.replace(pathname, '');
// Presently, what is left in the variable queries is : ?v=1.8.7&country=india
// Perform query functions if present
if (queries != "" && queries != "?") {
// Remove question mark '?'
queries = queries.slice(1);
// Split all the different queries
queries = queries.split("&");
// Get the number of queries
var length = queries.length;
// Declare global variables to store keys and elements
$_GET_Params = new Array();
$_GET = {};
// Perform functions per query
for (var i = 0; i < length; i++) {
// Get the present query
var key = queries[i];
// Split the query and the value
key = key.split("=");
// Assign value to the $_GET variable
$_GET[key[0]] = [key[1]];
// Assign value to the $_GET_Params variable
$_GET_Params[i] = key[0];
}
}
}
// Execute the function
$_GET();
</script>
<h1>GET Parameters</h1>
<h2>Try to insert some get parameter and access it through javascript</h2>
</body>
</html>
Si cela ne vous dérange pas d'utiliser une bibliothèque au lieu de déployer votre propre implémentation, consultez https://github.com/jgallen23/querystring .
Voici un autre exemple basé sur l'exemple de Kat et Bakudan ci-dessus, mais en le rendant un peu plus générique.
function getParams ()
{
var result = {};
var tmp = [];
location.search
.substr (1)
.split ("&")
.forEach (function (item)
{
tmp = item.split ("=");
result [tmp[0]] = decodeURIComponent (tmp[1]);
});
return result;
}
location.getParams = getParams;
console.log (location.getParams());
console.log (location.getParams()["returnurl"]);
Pour obtenir les paramètres sous forme d'objet JSON:
alert(getUrlParameters().toSource())
function explode(delim, str)
{
return str.split(delim);
}
function getUrlParameters()
{
var out = {};
var str = window.location.search.replace("?", "");
var subs = explode('&', str);
for(var i = 0; i < subs.length; ++i)
{
var vals = explode('=', subs[i]);
out[vals[0]] = vals[1];
}
return out;
}
Ma solution s'étend sur @ tak3r
Il retourne un objet vide lorsqu'il n'y a pas de paramètres de requête et supporte la notation de tableau ?a=1&a=2&a=3
:
function getQueryParams () {
function identity (e) { return e; }
function toKeyValue (params, param) {
var keyValue = param.split('=');
var key = keyValue[0], value = keyValue[1];
params[key] = params[key]?[value].concat(params[key]):value;
return params;
}
return decodeURIComponent(window.location.search).
replace(/^\?/, '').split('&').
filter(identity).
reduce(toKeyValue, {});
}
Si vous utilisez angularjs, vous pouvez utiliser $routeParams
en utilisant ngRoute
module
Vous devez ajouter un module sur votre application
angular.module('myApp', ['ngRoute'])
Maintenant, vous pouvez utiliser le service $routeParams
.controller('AppCtrl', function($routeParams) {
console.log($routeParams); //json object
}
Vous pouvez utiliser la fonction de recherche disponible dans l'objet de localisation. La fonction de recherche donne la partie paramètre de l'URL. les détails peuvent être trouvés ici - http://www.javascriptkit.com/jsref/location.shtml
Vous devrez analyser la chaîne résultante pour obtenir les variables et leurs valeurs, par exemple. en les séparant sur '='