¿Enviar datos POST al redirigir con JavaScript/jQuery? [duplicar]
Básicamente, lo que quiero hacer es enviar POST
datos 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 GET
razones 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 POST
datos con jQuery.post()
, pero necesito que se envíen con el nuevo window.location
.
En resumen, necesito enviar api_url
valor a través POST
de 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();
}
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();
Construya y complete un method=POST action="http://example.com/vote"
formulario oculto y envíelo, en lugar de usarlo window.location
en absoluto.
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();
}
});