Question

Est-il possible de créer les paramètres de requête permettant d'effectuer une demande GET en JavaScript?

Comme en Python, vous avez urllib.urlencode () , qui prend un dictionnaire (ou une liste de deux tuples) et crée une chaîne telle que 'var1 = valeur1 & amp; var2 = valeur2' .

Était-ce utile?

La solution

Voilà:

function encodeQueryData(data) {
   const ret = [];
   for (let d in data)
     ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));
   return ret.join('&');
}

Utilisation:

const data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
const querystring = encodeQueryData(data);

Autres conseils

fonctionnel

function encodeData(data) {
    return Object.keys(data).map(function(key) {
        return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
}   

Zabba a fourni dans un commentaire sur la réponse actuellement acceptée une suggestion selon laquelle, à mes yeux, est la meilleure solution: utilisez < a href = "http://api.jquery.com/jQuery.param/" rel = "nofollow noreferrer"> jQuery.param () .

Si j'utilise jQuery.param () sur les données de la question d'origine, le code est simplement:

const params = jQuery.param({
    var1: 'value',
    var2: 'value'
});

La variable params sera

"var1=value&var2=value"

Pour obtenir des exemples plus compliqués, des entrées et des sorties, voir jQuery.param () . documentation.

URLSearchParams prend en charge de plus en plus les navigateurs.

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = new URLSearchParams(data);

// searchParams.toString() === 'var1=value1&var2=value2'

Node.js propose le module chaîne de chaînes de caractères .

const querystring = require('querystring');

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = querystring.stringify(data);

// searchParams === 'var1=value1&var2=value2'

Nous venons de publier arg.js , un projet visant à résoudre ce problème une fois et pour tous. Cela a toujours été si difficile, mais vous pouvez maintenant le faire:

var querystring = Arg.url({name: "Mat", state: "CO"});

Et lire des œuvres:

var name = Arg("name");

ou obtenir le tout:

var params = Arg.all();

et si vous vous souciez de la différence entre ? query = true et # hash = true , vous pouvez utiliser le Arg.query () et les méthodes Arg.hash () .

Cela devrait faire le travail:

const createQueryParams = params => 
      Object.keys(params)
            .map(k => `${k}=${encodeURI(params[k])}`)
            .join('&');

Exemple:

const params = { name : 'John', postcode: 'W1 2DL'}
const queryParams = createQueryParams(params)

Résultat:

name=John&postcode=W1%202DL

Si vous utilisez Prototype , il existe Form.serialize

Si vous utilisez jQuery , il existe Ajax / serialize

Je ne connais aucune fonction indépendante pour y parvenir, mais une recherche sur Google a révélé des options prometteuses si vous n'utilisez pas actuellement de bibliothèque. Si vous ne l'êtes pas, vous devriez le faire car ils sont le paradis.

Tout comme pour revenir sur cette question de presque 10 ans. À l'ère de la programmation standard, le mieux est de configurer votre projet à l'aide d'un gestionnaire de dépendances ( npm ). Il existe toute une industrie artisanale de bibliothèques qui codent des chaînes de requête et prennent en charge tous les cas extrêmes. C’est l’un des plus populaires -

https://www.npmjs.com/package/query-string

ES2017 (ES8)

Utilisation de Objet. entries () , qui renvoie un tableau des paires [clé, valeur] de l'objet. Par exemple, pour {a: 1, b: 2} , il renverrait [['a', 1], ['b', 2]] . Il n'est pas supporté (et ne sera pas) uniquement par IE.

Code:

const buildURLQuery = obj =>
      Object.entries(obj)
            .map(pair => pair.map(encodeURIComponent).join('='))
            .join('&');

Exemple:

buildURLQuery({name: 'John', gender: 'male'});

Résultat:

"name=John&gender=male"

Une petite modification au texte dactylographié:

  public encodeData(data: any): string {
    return Object.keys(data).map((key) => {
      return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
  }

This thread pointe vers du code pour échapper des URL en php. Il existe escape () et unescape () , qui feront le gros du travail, mais vous devez ajouter quelques éléments supplémentaires.

function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}

function urldecode(str) {
str = str.replace('+', ' ');
str = unescape(str);
return str;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top