如何通过'重定向;邮政';使用Javascript的方法?

如何通过'重定向;邮政';使用Javascript的方法?,javascript,jquery,redirect,post,Javascript,Jquery,Redirect,Post,我已经询问过了,但没有弄清楚我发现了什么。是否有任何方法可以使用Javascript或jquery通过POST方法重定向到给定url 没有办法这样做 即使是a元素也会对GET进行攻击 您可以做的是发出Ajax请求,发布并在成功时使用窗口.open()创建表单,填写方法和操作属性,提交表单 var redirect = function(url, method) { var form = document.createElement('form'); form.method = m

我已经询问过了,但没有弄清楚我发现了什么。是否有任何方法可以使用Javascript或jquery通过POST方法重定向到给定url

没有办法这样做

即使是
a
元素也会对
GET
进行攻击


您可以做的是发出Ajax请求,发布并在成功时使用
窗口.open()
创建表单,填写
方法
操作
属性,提交表单

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=函数(url,方法){
$('', {
方法:方法,,
操作:url
}).submit();
};
重定向('http://www.example.com","后",;

实际上有一个窍门。创建隐藏表单并触发submit按钮,例如jQuery:

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

我建议您使用Eugene Naydenov发布的无jQuery版本,我认为您应该构建并填写一个隐藏方法=POST action=“YOUR_URL”表单,然后提交,

试试这个:

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();
var url='1〕http://example.com/vote/“+用户名;
变量形式=$('')+
'' +
'');
$('body')。追加(表格);
$(表单).submit();

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

$("#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;
        });
$(“#提交_btn”)。单击(函数(){
$('.error_status').html();
if($(“表格frm信息板”).valid()
{
$.ajax({
类型:“POST”,
url:“”,
数据:$('#frm_消息板')。序列化(),
成功:功能(msg){
var msg=$.parseJSON(msg);
如果(msg.success=='yes')
{
返回true;
}
其他的
{
警报(“服务器错误”);
返回false;
}
}
});
}
返回false;
});

这里的想法是将数据发送到服务器,同时将用户重定向到另一个网页,而无需使用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>

var form=document.createElement(“表单”);
form.method='post';
form.action='receive.php';
var input=document.createElement('input');
input.type=“text”;
input.name=“数据”;
input.value=“这是我通过POST发送到服务器的数据”;
表单。追加子项(输入);
表单提交();
在PHP中接收此数据:



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

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

> $.ajax({
>                       type: "POST",
>                       url: "www.example.com/the_page_I_post_to.php",
>                       data: $('yourform').serialize(),//sent data
>                       success: function(msg) {
>                           alert("posted !");
>                        }

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

。。。使用AJAX Jquery:

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' });
根据客户的回答,我最终使用了这个可以填充表单数据的工具,希望对其他人有用:

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);
}
更新(2021):几年后,一个打开新选项卡/窗口的版本对我也很有用,所以希望这也会有用,只是要确保这会发生在点击事件中,否则浏览器会阻止它

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();
    }
});
使用POST变量重定向(在jQuery上)

varhttp://www.website.com/page?id=23231';
$.redirectPost(重定向,{x:'example',y:'abc'});
$扩展(
{
重定向帖子:函数(位置,参数)
{
var形式=“”;
$.each(参数、函数(键、值){
形式+='';
});
$(''+表单+'').submit();
}
});

你能举个例子吗?我真的不明白这个问题,如果这个方法是另一个域,那么它就不起作用了。但是,如果你把它插入到文档中,它当然会起作用。与任何表格提交相同。正因为如此。我不得不添加这个来让提交工作:$('body').append(form);JQuery$.ajax实际上并不重定向。它在后台发送一个XHR。@Fernando发布的答案根据询问的内容最有效。请注意,如果您将
$(“#myform”).submit()
更改为
document.querySelector(“#myform”).submit()
,则不需要jQuery。这是最好的答案,因为它说明了通过POST方法发送数据,这就是您希望使用POST方法重定向的原因,或者使用GET,您可能需要添加
document.body.appendChild(表单)
对此进行修改(例如,就在
form.submit()
之前),因为HTML规范不允许提交与文档无关的表单。有关更多信息,请参阅。我建议还添加
document.body.removeChild(表单)提交后。我很高兴我找到了这样的帖子和答案。使用
XMLHttpRequest
从其他域重定向页面是不允许的。浏览器将在无
访问控制允许来源的情况下检测到它,这是解决
CORS
问题的一种方法,使用表单提交重定向post请求。@ruben056我们将当前显示的页面重定向到别处。所有内容都将被删除。问题是如何重定向到新页面。这不会重定向到新页面
> $.ajax({
>                       type: "POST",
>                       url: "www.example.com/the_page_I_post_to.php",
>                       data: $('yourform').serialize(),//sent data
>                       success: function(msg) {
>                           alert("posted !");
>                        }
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' });
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);
}
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();
    }
});