129 votes

passer les données postales avec window.location.href

En utilisant window.location.href, j'aimerais transmettre des données POST à la nouvelle page que j'ouvre. Est-ce possible en utilisant JavaScript et jQuery ?

12 votes

Réglage de window.location.href fait une demande GET pour la nouvelle URL, et non POST.

89voto

Guffa Points 308133

Utilisation de window.location.href il n'est pas possible d'envoyer une requête POST.

Ce que vous devez faire est de mettre en place une form contenant des champs de données, définissez la balise action du formulaire à l'URL et l'attribut method à POST, puis appelez le submit sur la méthode form étiquette.

0 votes

J'ai des données provenant de 3 formulaires différents et j'essaie d'envoyer les 3 formulaires sur la même page. J'ai donc essayé de sérialiser les formulaires avec jQuery et de les envoyer d'une autre manière.

0 votes

@Brian : Tu ne peux pas tout mettre dans un seul form pour que tout soit envoyé ensemble automatiquement ?

0 votes

Un formulaire se trouve dans une boîte de dialogue jQueryUI - je ne peux donc pas tous les inclure.

87voto

Mohamed Khamis Points 1167

Ajoutez un formulaire à votre HTML, quelque chose comme ceci :

<form style="display: none" action="/the/url" method="POST" id="form">
  <input type="hidden" id="var1" name="var1" value=""/>
  <input type="hidden" id="var2" name="var2" value=""/>
</form>

et utiliser JQuery pour remplir ces valeurs (bien sûr, vous pouvez aussi utiliser javascript pour faire quelque chose de similaire)

$("#var1").val(value1);
$("#var2").val(value2);

Puis, enfin, soumettre le formulaire

$("#form").submit();

du côté du serveur, vous devriez pouvoir récupérer les données que vous avez envoyées en vérifiant var1 y var2 La façon de procéder dépend du langage côté serveur que vous utilisez.

0 votes

Quand je fais cela, mon navigateur redirige vers domain/undefined. Qu'est-ce que je fais de mal ?

23voto

Aquajet Points 544

Comme il a été dit dans d'autres réponses, il n'y a aucun moyen de faire une demande POST en utilisant window.location.href. Pour le faire, vous pouvez créer un formulaire et le soumettre immédiatement.

Vous pouvez utiliser cette fonction :

function postForm(path, params, method) {
    method = method || 'post';

    var form = document.createElement('form');
    form.setAttribute('method', method);
    form.setAttribute('action', path);

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            var hiddenField = document.createElement('input');
            hiddenField.setAttribute('type', 'hidden');
            hiddenField.setAttribute('name', key);
            hiddenField.setAttribute('value', params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});

https://stackoverflow.com/a/133997/2965158

10voto

Mohd Tauovir Khan Points 181

Utilisez ce fichier : "jquery.redirect.js".

$("#btn_id").click(function(){
    $.redirect(http://localhost/test/test1.php,
        {
            user_name: "khan",
            city : "Meerut",
            country : "country"
        });
    });
});

voir https://github.com/mgalante/jquery.redirect

9voto

joequincy Points 1141

Réponse courte : non. window.location.href n'est pas capable de transmettre des données POST.

Réponse un peu plus satisfaisante : Vous pouvez utiliser cette fonction pour cloner toutes les données de votre formulaire et le soumettre.

var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
//   so that you can differentiate between forms when
//   processing the data server-side.
submitMe.importFields = function(form){
    for(k in form.elements){
        if(input = form.elements[k]){
            if(input.type!="submit"&&
                     (input.nodeName=="INPUT"
                    ||input.nodeName=="TEXTAREA"
                    ||input.nodeName=="BUTTON"
                    ||input.nodeName=="SELECT")
                     ){
                var output = input.cloneNode(true);
                output.name = form.name + nameJoiner + input.name;
                this.appendChild(output);
            }
        }
    }
}
  • Faites submitMe.importFields(form_element); pour chacun des trois formulaires que vous voulez soumettre.
  • Cette fonction ajoutera le nom de chaque formulaire aux noms de ses entrées enfant (si vous avez un formulaire de type <input name="email"> sur <form name="login"> le nom soumis sera login_name .
  • Vous pouvez modifier le nameJoiner à quelque chose d'autre que _ afin qu'il n'y ait pas de conflit avec votre schéma de dénomination des entrées.
  • Une fois que vous avez importé tous les formulaires nécessaires, faites submitMe.submit();

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