Отправить данные POST при перенаправлении с помощью JavaScript/jQuery?

В основном я хочу отправить POST данные при изменении window.location, как если бы пользователь отправил форму и перешел на новую страницу. Мне нужно сделать это так, потому что мне нужно пройти по скрытому URL-адресу, и я не могу просто поместить его в URL как GET по косметическим причинам.

Это то, что у меня есть на данный момент, но оно не отправляет никаких данных POST.

if(user has not voted) {

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

}

Я знаю, что вы можете отправить POST данные с помощью jQuery.post(), но мне нужно, чтобы он был отправлен с новым window.location.

Чтобы повторить, мне нужно отправить значение api_url через POST в http://example.com/vote/, одновременно отправляя пользователя на ту же страницу.


В дальнейшем для справки я сделал следующее:

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

}

Ответ 1

Создайте и заполните скрытую форму method=POST action="http://example.com/vote" и отправьте ее, а не используя window.location вообще.

Ответ 2

per @Kevin-Reid ответ, здесь альтернатива примеру "Я закончил делать следующий", который позволяет избежать необходимости имени, а затем снова искать объект формы, создав конкретную форму (используя 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();

Ответ 3

Здесь простая небольшая функция, которая может применяться везде, пока вы используете 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();
    }
});

Ответ 4

Если вы используете jQuery, существует плагин перенаправления, который работает с методом POST или GET. Он создает форму со скрытыми входами и представляет ее для вас. Пример того, как заставить его работать:

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

Примечание.. Вы можете передать типы методов GET или POST в качестве необязательного третьего параметра; По умолчанию используется POST.

Ответ 5

Вот метод, который не использует jQuery. Я использовал его для создания букмарклета, который проверяет текущую страницу на 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();

Ответ 6

Ответы здесь могут ввести в заблуждение, поэтому я дам вам пример кода, с которым я работаю.

Для начала отметим, что нет параметра POST для java script функции windows.location, о которой вы говорите.

Итак, вам нужно...

  • Динамически создавать форму с параметром POST.

  • Динамически помещать текстовое поле или текстовые поля с вашими желаемыми значениями для публикации

  • Вызвать форму отправки, которую вы динамически создали.

И для примера.

     //---------- 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>

Если все сделано хорошо, вы должны быть перенаправлены на test2.php, и вы можете использовать POST для чтения переданных значений employee_name и зарплаты; это будет Питер и 1000 соответственно.

В test2.php вы можете получить свои значения таким образом.

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

Разумеется, убедитесь, что вы дезинфицируете свои пройденные значения.

Ответ 7

Общая функция для размещения любого объекта JavaScript для данного URL.

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

Ответ 8

Это весьма удобно использовать:

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

то используйте его как:

myRedirect("/yourRedirectingUrl", "arg", "argValue");

Ответ 9

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

Найдено код http://www.prowebguru.com/2013/10/send-post-data-while-redirecting-with-jquery/

Попытаемся попробовать это и другие предложения для моей работы.

Есть ли другой способ сделать то же самое?

Ответ 10

Вы можете использовать атрибут target для отправки формы с перенаправлением из iframe. Ваш открытый тег формы будет примерно таким:

method="post" action="http://some.url.com/form_action" target="_top"

Ответ 11

№ РЕШЕНИЯ. 1

 //your variable
    var data = "brightcherry";

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

№ РЕШЕНИЯ. 2

//your variable
var data = "brightcherry";

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

подробности