¿Enviar datos POST al redirigir con JavaScript/jQuery? [duplicar]

Resuelto Josh Foskett asked hace 12 años • 10 respuestas

Básicamente, lo que quiero hacer es enviar POSTdatos cuando cambio el archivo window.location, como si un usuario hubiera enviado un formulario y fuera a una nueva página. Necesito hacerlo de esta manera porque necesito pasar una URL oculta y no puedo simplemente colocarla en la URL por GETrazones cosméticas.

Esto es lo que tengo en este momento, pero no envía ningún dato POST.

if(user has not voted) {

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

}

Sé que puedes enviar POSTdatos con jQuery.post(), pero necesito que se envíen con el nuevo window.location.

En resumen, necesito enviar api_urlvalor a través POSTde http://example.com/vote/, mientras envío al usuario a la misma página al mismo tiempo.


Para referencia futura, terminé haciendo lo siguiente :

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();

}
Josh Foskett avatar Dec 06 '11 00:12 Josh Foskett
Aceptado

Según la respuesta de @ Kevin-Reid, aquí hay una alternativa al ejemplo "Terminé haciendo lo siguiente" que evita la necesidad de nombrar y luego buscar el objeto del formulario nuevamente construyendo el formulario específicamente (usando 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();
tardate avatar Apr 05 '2012 02:04 tardate

Construya y complete un method=POST action="http://example.com/vote"formulario oculto y envíelo, en lugar de usarlo window.locationen absoluto.

Kevin Reid avatar Dec 05 '2011 18:12 Kevin Reid

Aquí hay una pequeña función simple que se puede aplicar en cualquier lugar siempre que uses 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();
    }
});
tfont avatar Apr 28 '2014 17:04 tfont