260 votes

Envoyer des données POST lors d'une redirection avec Javascript / jQuery?

Fondamentalement, ce que je veux faire est d'envoyer POST données lorsque je change l' window.location, comme si l'utilisateur avait soumis un formulaire et il est allé vers une nouvelle page. J'ai besoin de le faire de cette façon parce que j'ai besoin de passer le long d'une URL masquée, et je ne peux pas il suffit de le placer dans l'url en tant que GET , pour des raisons esthétiques.

C'est ce que j'ai en ce moment, mais il n'envoie pas les données de publication.

if(user has not voted) {

    window.location = 'http://example.com/vote/' + Username;

}

Je sais que vous pouvez envoyer en POST des données avec d' jQuery.post(), mais j'en ai besoin pour être envoyé avec le nouveau window.location.

Donc, pour résumer, j'ai besoin d'envoyer api_url valeur par l'intermédiaire d' POST de http://example.com/vote/, tandis que l'envoi à l'utilisateur à la même page en même temps.


Pour les futurs refrence, j'ai fini par faire le suivant:

if(user has not voted) {

    $('#inset_form').html('<form action="http://example.com/vote/' + Username + '" name="vote" method="post" style="display:none;"><input type="text" name="api_url" value="' + Return_URL + '" /></form>');

    document.forms['vote'].submit();

}

258voto

tardate Points 6809

pour la réponse de @ Kevin-Reid, voici une alternative à l'exemple "J'ai fini par faire ce qui suit" qui évite d'avoir à nommer et ensuite à chercher l'objet formulaire en construisant spécifiquement le formulaire (en utilisant jQuery).

 var url = 'http://example.com/vote/' + Username;
var form = $('<form action="' + url + '" method="post">' +
  '<input type="text" name="api_url" value="' + Return_URL + '" />' +
  '</form>');
$('body').append(form);  // This line is not necessary
$(form).submit();
 

191voto

Kevin Reid Points 8806

Construisez et remplissez un formulaire method=POST action="http://example.com/vote" caché et soumettez-le plutôt que d'utiliser window.location du tout.

62voto

tfont Points 1020

Voici une petite fonction simple qui peut être appliquée partout où vous utilisez jQuery.

 var redirect = 'http://www.website.com/page?id=23231';
$.redirectPost(redirect, {x: 'example', y: 'abc'});

// jquery extend function
$.extend(
{
    redirectPost: function(location, args)
    {
        var form = '';
        $.each( args, function( key, value ) {
            form += '<input type="hidden" name="'+key+'" value="'+value+'">';
        });
        $('<form action="' + location + '" method="POST">' + form + '</form>').appendTo($(document.body)).submit();
    }
});
 

39voto

olee Points 1

Voici une méthode qui n'utilise pas jQuery. Je l'ai utilisé pour créer un bookmarklet, qui vérifie la page en cours sur w3-html-validator.

 var f = document.createElement('form');
f.action='http://validator.w3.org/check';
f.method='POST';
f.target='_blank';

var i=document.createElement('input');
i.type='hidden';
i.name='fragment';
i.value='<!DOCTYPE html>'+document.documentElement.outerHTML;
f.appendChild(i);

document.body.appendChild(f);
f.submit();
 

17voto

mattingly890 Points 1653

Fonction générique pour publier tout objet JavaScript dans l'URL donnée.

 function postAndRedirect(url, postData)
{
    var postFormStr = "<form method='POST' action='" + url + "'>\n";

    for (var key in postData)
    {
        if (postData.hasOwnProperty(key))
        {
            postFormStr += "<input type='hidden' name='" + key + "' value='" + postData[key] + "'></input>";
        }
    }

    postFormStr += "</form>";

    var formElement = $(postFormStr);

    $('body').append(formElement);
    $(formElement).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