Comment faire une requête post en JavaScript sans avoir recours à un formulaire ?
Il est possible en JavaScript d'effectuer une requête POST sans avoir recours à un formulaire de manière classique.
Pour effectuer une requête de type POST afin de changer de page dans le navigateur, la logique veut que l'on utilise un formulaire avec un bouton sur lequel l'on cliquerait. Il est possible en JavaScript d'effectuer une requête POST sans avoir recours à un formulaire de manière classique. Pour cela, on peut créer une fonction qui prendrait en paramètre l'URL de destination et les noms et valeurs des paramètres.
Cette fonction va tout d'abord créer un formulaire dynamiquement, en utilisant les méthodes fournies pour la gestion du DOM et notamment la méthode createElement(). La méthode setAttribute() permettra de définir l'URL de destination et la méthode POST servira de méthode de soumission des informations. Ensuite, pour chaque paramètre, on va créer un élément <input> de type caché (hidden), et on lui donnera les noms et valeurs correspondant aux paramètres. Pour éviter un éventuel problème, on vérifiera que le paramètre possède bien une valeur avec la méthode hasOwnProperty().
On ajoutera ces champs au formulaire, puis on ajoutera ce formulaire à la page internet afin d'éviter des problèmes de compatibilité avec d'autres navigateurs. Il ne reste plus qu'à soumettre ce formulaire avec la méthode submit() et on obtient ainsi une méthode de redirection POST en JavaScript :
function post_en_url(url, parametres) { //Création dynamique du formulaire var form = document.createElement(form); form.setAttribute(method, POST); form.setAttribute(action, url); //Ajout des paramètres sous forme de champs cachés for(var cle in parametres) { if(parametres.hasOwnProperty(cle)) { var champCache = document.createElement(input); champCache.setAttribute(type, hidden); champCache.setAttribute(name, cle); champCache.setAttribute(value, parametres[cle]); form.appendChild(champCache); } } //Ajout du formulaire à la page et soumission du formulaire document.body.appendChild(form); form.submit(); }