31

我已经查询过,但没有弄清楚我发现了什么。有没有办法使用Javascript或jquery重定向以POST方法提供url?

4

11 回答 11

60

根据Eugene Naydenov的回答,我最终使用了它,它也可以填写表单数据,希望对其他人有用:

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

更新(2021 年):几年后,一个打开新选项卡/窗口的版本也对我有用,所以希望这也有用,只是确保这会在点击事件中发生,因为浏览器应该阻止它,否则,

function openPostPage(url, data) {
    var form = document.createElement('form');
    document.body.appendChild(form);
    form.target = '_blank';
    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();
    document.body.removeChild(form);
}
于 2016-07-18T20:30:37.283 回答
19

创建表单,填写methodaction属性,提交表单。

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

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

jQuery 版本(但在这种特殊情况下我更喜欢纯 JavaScript ):

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

redirect('http://www.example.com', 'post');
于 2013-09-28T07:09:42.113 回答
10

这里的想法是在将用户重定向到另一个网页时将数据发送到服务器,而不使用 GET 方法并保持 URL 的外观。因此,我们将使用与 POST 方法发送表单相同的过程。

用于创建表单并将其提交到服务器的 HTML/Javascript 代码:

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

在 PHP 中接收此数据:

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

通过这种方式,用户将被重定向到 receive.php,并在 POST 方法中通知一些数据。

于 2015-01-04T15:21:56.250 回答
2

其实有个窍门。您创建一个隐藏表单并触发提交按钮,例如使用 jQuery:

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

并做一个

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

我建议您使用Eugene Naydenov发布的非 jQuery 版本

于 2013-09-28T07:10:07.313 回答
2

尝试这个:

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();
于 2013-09-28T07:12:00.577 回答
2

使用 POST 变量重定向(在 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();
    }
});
于 2017-11-13T04:52:23.343 回答
-1

您可以使用序列化您的表单和帖子中的所有数据。下面是一个例子。

$("#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;
        });
于 2013-09-28T07:37:07.830 回答
-2

我认为你应该构建并填写一个隐藏的方法=POST action="YOUR_URL" 表单并提交它,

于 2013-09-28T07:11:40.203 回答
-3

没有办法这样做。

甚至一个a 元素都击中了GET.

您可以做的是发出 Ajax 请求以发布和on-success使用window.open()

于 2013-09-28T07:07:43.240 回答
-3

使用 jQuery 发布数据并重定向到您想要的位置,如下所示:

$.ajax({
  type: 'POST',
  url: 'receivedata.asp',
  data: 'formValue=someValue',
  success: function(data){
      window.location = data;
  }
});

您可以删除数据:'formValue=someValue',如果没有数据可以传递到您要发布到的页面。

于 2015-07-30T12:46:42.903 回答
-3

呵呵...使用 AJAX Jquery:

> $.ajax({
>                       type: "POST",
>                       url: "www.example.com/the_page_I_post_to.php",
>                       data: $('yourform').serialize(),//sent data
>                       success: function(msg) {
>                           alert("posted !");
>                        }
于 2015-07-30T12:54:56.420 回答