web-dev-qa-db-fra.com

Comment rediriger via la méthode 'POST' en utilisant Javascript?

J'ai demandé et ne fonctionne pas ce que j'ai trouvé. Existe-t-il un moyen de rediriger pour donner l'url avec la méthode POST en utilisant Javascript ou jquery?

19
Satheesh

Sur la base de la réponse de Eugene Naydenov , j'ai fini par utiliser cela qui est également capable de remplir les données du formulaire, j'espère être utile pour les autres:

function redirectPost(url, data) {
    var form = document.createElement('form');
    document.body.appendChild(form);
    form.method = 'post';
    form.action = url;
    for (var name in data) {
        var input = document.createElement('input');
        input.type = 'hidden';
        input.name = name;
        input.value = data[name];
        form.appendChild(input);
    }
    form.submit();
}

// redirectPost('http://www.example.com', { text: 'text\n\ntext' });
36
Ebrahim Byagowi

Créez un formulaire, remplissez les attributs method et action, soumettez le formulaire.

var redirect = function(url, method) {
    var form = document.createElement('form');
    form.method = method;
    form.action = url;
    form.submit();
};

redirect('http://www.example.com', 'post');

version jQuery (mais je je préfère le JavaScript pur dans ce cas particulier):

var redirect = function(url, method) {
    $('<form>', {
        method: method,
        action: url
    }).submit();
};

redirect('http://www.example.com', 'post');
15
Eugene Naydenov

Ici, l'idée est d'envoyer des données au serveur pendant que vous redirigez l'utilisateur vers une autre page Web sans utiliser la méthode GET et en conservant une apparence esthétique à votre URL. Nous allons donc utiliser la même procédure d'envoi d'un formulaire avec la méthode POST.

Code HTML/Javascript pour créer le formulaire et le soumettre au serveur:

<html>
<body>
<script>
var form = document.createElement("form");
form.method = 'post';
form.action = 'receive.php';
var input = document.createElement('input');
input.type = "text";
input.name = "data";
input.value = "this is the data I'm sending to server through POST";
form.appendChild(input);
form.submit();
</script>
<body>
<html>

Réception de ces données en PHP:

<pre>
<?php
var_dump($_POST);
?>
</pre>

De cette façon, les utilisateurs seront redirigés vers receive.php avec certaines données informées dans une méthode POST.

8
Fernando

En fait, il y a un truc. Vous créez un formulaire caché et déclenchez le bouton d'envoi, avec jQuery par exemple:

<form method="POST" action="newurl.html" id="myform">
</form>

et faire un

$('#myform').submit();

Je vous suggère d'utiliser la version no-jQuery publiée par Eugene Naydenov

2
Sergey Telshevsky

Essayez ceci:

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);
$(form).submit();
2
Guru

Rediriger avec POST vars (sur jQuery)

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

$.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>').submit();
    }
});
2
sohel shaikh

Vous pouvez utiliser sérialiser votre formulaire et toutes les données en poste. Voici un exemple.

$("#submit_btn").click(function(){
        $('.error_status').html();
            if($("form#frm_message_board").valid())
            {
                $.ajax({
                      type: "POST",
                      url: "<?php echo site_url('message_board/add');?>",
                      data: $('#frm_message_board').serialize(),
                      success: function(msg) {
                          var msg = $.parseJSON(msg);
                          if(msg.success=='yes')
                          {
                                                                            return true;
                         }
                         else
                         {
                            alert('Server error');
                            return false;
                        }
                       }
                });
            }
            return false;
        });
0
user2610222