发送POST数据重定向与JavaScript/jQuery?

基本上,我想做的是当我改变window.location时发送POST数据,就好像用户提交了一个表单,它转到了一个新页面。我需要这样做,因为我需要传递一个隐藏的URL,我不能简单地将它作为GET放在URL中。

这是我目前拥有的,但它不发送任何POST数据。

if(user has not voted) {


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


}

我知道你可以用jQuery.post()发送POST数据,但我需要它与新的window.location一起发送。

因此,概括一下,我需要通过POSTapi_url值发送到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();


}
479091 次浏览

构造并填写隐藏的method=POST action="http://example.com/vote"表单并提交,而不是使用window.location

每@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();
你可以使用target属性从iframe重定向发送表单。 你的表单打开标签应该是这样的:

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

这里有一个简单的小函数,只要你使用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();
}
});

将任何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();
}
这里有一个方法,它不使用jQuery。 我用它创建了一个bookmarklet,它在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();

使用起来非常方便:

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");
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/找到代码

我打算试试这个,还有其他一些对我工作的建议。

还有别的办法吗?

如果你正在使用jQuery,有一个重定向的插件与POST或GET方法一起工作。它创建一个带有隐藏输入的表单并为您提交它。如何让它工作的例子:

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

你可以将方法类型GET或POST作为可选的第三个参数传递;POST是默认值。

这里的答案可能令人困惑,所以我会给你一个示例代码,我正在工作。

首先请注意,java脚本windows没有POST参数。你所引用的定位函数。

所以你必须…

  1. 动态地创建带有POST参数的表单。

  2. 动态地放置一个或多个带有您想要发布的值的文本框

  3. 调用动态创建的提交表单。

举个例子。

     //---------- 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和salary的值;分别是彼得和1000。

在test2.php中,您可以这样获取您的值。

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

不用说,一定要清除传递的值。

没有解决方案。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);

details