基本上我想要做的是在更改POST
时发送window.location
数据,就像用户提交了表单并进入新页面一样。我需要这样做,因为我需要传递一个隐藏的网址,而且出于美观原因,我不能简单地将其作为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();
}
答案 0 :(得分:197)
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();
答案 1 :(得分:147)
构建并填写隐藏的method=POST action="http://example.com/vote"
表单并提交,而不是使用window.location
。
答案 2 :(得分:44)
这是一个简单的小函数,只要你使用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();
}
});
答案 3 :(得分:24)
如果您使用的是jQuery,则有redirect plugin可以使用POST或GET方法。它创建一个带有隐藏输入的表单并为您提交。一个如何让它工作的例子:
$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});
注意:您可以将方法类型GET或POST作为可选的第三个参数传递; POST是默认值。
答案 4 :(得分:17)
这是一个不使用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();
答案 5 :(得分:11)
这里的答案可能令人困惑,所以我会给你一个我正在使用的示例代码。
首先请注意,您所指的java脚本windows.location函数没有POST参数。
所以你必须......
使用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和salary的传递值;这将分别是彼得和1000。
在test2.php上你可以得到你的价值。
$employee_name = $_POST['employee_name'];
$salary = $_POST['salary'];
毋庸置疑,请确保您清理传递的值。
答案 6 :(得分: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();
}
答案 7 :(得分:6)
使用起来非常方便:
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");
答案 8 :(得分:1)
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/找到代码
试着为我的工作尝试这个和其他建议。
还有其他方法可以做同样的事吗?
答案 9 :(得分:0)
您可以使用target
属性从iframe发送包含重定向的表单。
您的表单打开标记将是这样的:
method="post" action="http://some.url.com/form_action" target="_top"
答案 10 :(得分:-8)
解决方案NO。 1 强>
//your variable
var data = "brightcherry";
//passing the variable into the window.location URL
window.location.replace("/newpage/page.php?id='"+product_id+"'");
解决方案NO。 2 强>
//your variable
var data = "brightcherry";
//passing the variable into the window.location URL
window.location.replace("/newpage/page.php?id=" + product_id);