Envoyer des données sur la redirection avec JavaScript / jQuery? [dupliquer]

cette question a déjà une réponse ici:

  • JavaScript requête post comme la soumission d'un formulaire 28 réponses

fondamentalement , ce que je veux faire est d'envoyer POST données lorsque je change le window.location , comme si un utilisateur a soumis un formulaire et il est allé à une nouvelle page. J'ai besoin d' pour le faire de cette façon parce que j'ai besoin de passer le long D'une URL cachée, et je ne peux pas simplement le placer dans L'URL comme un GET pour des raisons esthétiques.

C'est ce que j'ai en ce moment, mais il n'envoie aucune donnée postale.

if(user has not voted) {

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

}

je sais que vous pouvez envoyer des données POST avec jQuery.post() , mais j'ai besoin qu'elles soient envoyées avec le nouveau window.location .

donc pour récapituler, je dois envoyer la valeur api_url via POST à http://example.com/vote/ , tout en envoyant l'utilisateur à la même page en même temps.


pour référence future, 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();

}
174
demandé sur Xufox 2011-12-05 21:54:45

11 réponses

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

141
répondu Kevin Reid 2011-12-05 18:42:00

selon 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 puis de chercher à nouveau l'objet de forme en construisant le formulaire spécifiquement (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);
form.submit();
184
répondu tardate 2014-11-12 22:41:15

Voici une simple petite fonction qui peut être appliquée n'importe où tant que 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 ) {
            value = value.split('"').join('\"')
            form += '<input type="hidden" name="'+key+'" value="'+value+'">';
        });
        $('<form action="' + location + '" method="POST">' + form + '</form>').appendTo($(document.body)).submit();
    }
});
39
répondu tfont 2015-03-20 18:13:27

si vous utilisez jQuery, il y a un plugin de redirection qui fonctionne avec la méthode POST ou GET. Il crée une forme avec des entrées cachées et la soumet pour vous. Un exemple de comment le faire fonctionner:

$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});

Note: vous pouvez passer les types de méthode GET ou POST comme troisième paramètre optionnel; POST est le paramètre par défaut.

22
répondu Tom Sarduy 2015-03-18 13:05:00

Voici une méthode qui n'utilise pas jQuery. Je l'ai utilisé pour créer un bookmarklet, qui vérifie la page courante 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();
13
répondu olee 2014-07-15 19:33:41

fonction générique pour afficher tout objet JavaScript à 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();
}
7
répondu therealrootuser 2014-05-02 03:23:39

les réponses ici peuvent être confuses donc je vais vous donner un exemple de code avec lequel je travaille.

pour commencer, notez qu'il n'y a aucun paramètre POST dans java script windows.fonction de localisation qui vous faites allusion.

il le faut...

  1. faites dynamiquement une forme avec un paramètre POST.

  2. mettez dynamiquement une boîte de texte ou des boîtes de texte avec votre valeurs souhaitées pour afficher

  3. Invoquez le formulaire de soumission que vous avez dynamiquement créé.

Et pour l'exemple.

     //---------- make sure to link to your jQuery library ----//

<script type="text/javascript" >

    var form = $(document.createElement('form'));
    $(form).attr("action", "test2.php");
    $(form).attr("method", "POST");
    $(form).css("display", "none");

    var input_employee_name = $("<input>")
    .attr("type", "text")
    .attr("name", "employee_name")
    .val("Peter" );
    $(form).append($(input_employee_name));


    var input_salary = $("<input>")
    .attr("type", "text")
    .attr("name", "salary")
    .val("1000" );
    $(form).append($(input_salary));

    form.appendTo( document.body );
    $(form).submit();

</script>

Si tout est bien fait, vous serez redirigé vers test2.php et vous pouvez utiliser POST pour lire les valeurs passées de employee_name et salary; ce sera Peter et 1000 respectivement.

lors de l'essai 2.php, vous pouvez obtenir vos valeurs ainsi.

$employee_name = $_POST['employee_name'];
$salary = $_POST['salary'];

inutile de dire , assurez-vous d'assainir vos valeurs passées.

7
répondu user3629945 2017-07-21 15:04:50

très pratique à utiliser:

var myRedirect = function(redirectUrl, arg, value) {
  var form = $('<form action="' + redirectUrl + '" method="post">' +
  '<input type="hidden" name="'+ arg +'" value="' + value + '"></input>' + '</form>');
  $('body').append(form);
  $(form).submit();
};

alors utilisez-le comme:

myRedirect("/yourRedirectingUrl", "arg", "argValue");
5
répondu Ali John 2014-07-23 16:32:33
var myRedirect = function(redirectUrl) {
var form = $('<form action="' + redirectUrl + '" method="post">' +
'<input type="hidden" name="parameter1" value="sample" />' +
'<input type="hidden" name="parameter2" value="Sample data 2" />' +
'</form>');
$('body').append(form);
$(form).submit();
};

Code trouvé à http://www.prowebguru.com/2013/10/send-post-data-while-redirecting-with-jquery /

va essayer ceci et d'autres suggestions pour mon travail.

y a-t-il une autre façon de faire la même chose ?

1
répondu Rajesh 2014-10-08 15:37:49

vous pouvez utiliser l'attribut target pour envoyer un formulaire avec une redirection depuis iframe. Votre étiquette ouverte de forme serait quelque chose comme ceci:

method="post" action="http://some.url.com/form_action" target="_top"
0
répondu joni jones 2013-12-30 09:32:37

SOLUTION NO. 1

 //your variable
    var data = "brightcherry";

    //passing the variable into the window.location URL
    window.location.replace("/newpage/page.php?id='"+product_id+"'");

SOLUTION NO. 2

//your variable
var data = "brightcherry";

//passing the variable into the window.location URL
window.location.replace("/newpage/page.php?id=" + product_id);

détails

-5
répondu Mohammad Faizan khan 2015-06-26 05:26:16