如何使用Javascript重定向"POST"方法?

Sat*_*esh 20 javascript jquery post redirect

我已经查询过,并没有弄清楚我发现了什么.有没有办法重定向到使用Javascript或jquery的POST方法给url ?

Ebr*_*owi 39

基于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' });
Run Code Online (Sandbox Code Playgroud)

  • 这是最佳答案,因为它考虑了通过POST方法发送数据的原因,这就是为什么您要使用POST方法重定向,否则您将使用GET的原因。 (2认同)
  • 您可能必须添加 `document.body.appendChild(form);` 到这里(例如就在 `form.submit()` 之前),因为 HTML 规范不允许与文档无关的表单提交。有关更多信息,请参阅 [此答案](/sf/answers/2945729951/)。 (2认同)

Eug*_*nov 15

创建表单,填充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');
Run Code Online (Sandbox Code Playgroud)

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

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

redirect('http://www.example.com', 'post');
Run Code Online (Sandbox Code Playgroud)

  • 当然.与任何表单提交相同.仅仅因为[同源政策](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy). (3认同)

Fer*_*ndo 8

这里的想法是将数据发送到服务器,同时将用户重定向到另一个网页,而不使用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>
Run Code Online (Sandbox Code Playgroud)

在PHP中接收此数据:

<pre>
<?php
var_dump($_POST);
?>
</pre>
Run Code Online (Sandbox Code Playgroud)

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


Sur*_*tta -3

没有办法这样做。

即使是一个a 元素 S 也会撞击GET.

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