5 votes

Obtenir une chaîne de requête avec Dojo

Les utilisateurs se heurtent à une URL qui contient une chaîne de requête appelée inquirytype . Pour un certain nombre de raisons, j'ai besoin de lire cette chaîne de requête avec javascript (Dojo) et de sauvegarder sa valeur dans une variable. J'ai fait pas mal de recherches pour trouver comment faire cela, et j'ai découvert quelques possibilités, mais aucune d'entre elles ne semble lire une chaîne de requête qui n'est pas codée en dur quelque part dans le script.

10voto

Juan Mendes Points 31678

Vous pouvez accéder aux paramètres de l'url en utilisant location.search sans Dojo La valeur d'un attribut javascript peut-elle être déterminée par un paramètre url manuel ?

function getUrlParams() {

  var paramMap = {};
  if (location.search.length == 0) {
    return paramMap;
  }
  var parts = location.search.substring(1).split("&");

  for (var i = 0; i < parts.length; i ++) {
    var component = parts[i].split("=");
    paramMap [decodeURIComponent(component[0])] = decodeURIComponent(component[1]);
  }
  return paramMap;
}

Vous pouvez alors procéder comme suit pour extraire l'identifiant de l'url /hello.php?id=5&name=value

var params = getUrlParams();
var id = params['id']; // or params.id

Le Dojo fournit http://dojotoolkit.org/reference-guide/dojo/queryToObject.html qui est un peu plus intelligent que ma simple implémentation et crée des tableaux à partir de clés dupliquées.

var uri = "http://some.server.org/somecontext/?foo=bar&foo=bar2&bit=byte";
var query = uri.substring(uri.indexOf("?") + 1, uri.length);
var queryObject = dojo.queryToObject(query);

//The structure of queryObject will be:
// {
//   foo: ["bar", "bar2],
//   bit: "byte"
// }

1voto

Pehmolelu Points 1579

Dans le nouveau dojo, on y accède avec io-query :

 require([
     "dojo/io-query",
 ], function (ioQuery) {
    GET = ioQuery.queryToObject(decodeURIComponent(dojo.doc.location.search.slice(1)));
    console.log(GET.id);            
 });

0voto

Jess Points 2039

Depuis dojo 0.9, il existe une meilleure option, queryToObject .

dojo.queryToObject(query)

Voir ceci question similaire avec ce que je pense être une réponse plus propre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X