用JavaScript / jQueryredirect发送POST数据?

基本上我想要做的是发送POST数据,当我改变window.location ,就像用户已经提交了一个表单,并且它去了一个新的页面。 我需要这样做,因为我需要传递一个隐藏的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(); } 

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

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(); 

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

如果您使用的是jQuery,那么可以使用POST或GET方法的redirect插件 。 它创build一个带有隐藏input的表单并提交给你。 一个如何让它工作的例子:

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

注意:您可以将方法typesGET或POST作为可选的第三个parameter passing; POST是默认的。

这是一个不使用jQuery的方法。 我用它来创build一个小书签,它检查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(); 

通用函数将任何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(); } 

这是非常方便的使用:

 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"); 

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

首先请注意,您所指的java脚本windows.location函数没有POST参数。

所以你必须…

  1. 使用POST参数dynamic创build表单。

  2. dynamic地放置一个文本框或文本框与您想要的值张贴

  3. 调用您dynamic创build的提交表单。

并举例说。

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

如果一切顺利,您将被redirect到test2.php,您可以使用POST来读取employee_name和salary的传递值; 那将分别是彼得和1000。

在test2.php上,你可以得到你的值。

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

不用说,确保你清理你的传递值。

 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/find代码;

去尝试这个和其他build议我的工作。

有没有其他方法可以做到这一点?

只是看看这个链接,你需要将表单附加到正文

https://stackoverflow.com/a/12464290/1312690

你可以使用target属性来发送来自iframe的redirect表单。 你的表单打开标签是这样的:

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

解决scheme 1

  //your variable var data = "brightcherry"; //passing the variable into the window.location URL window.location.replace("/newpage/page.php?id='"+product_id+"'"); 

解决scheme 2

 //your variable var data = "brightcherry"; //passing the variable into the window.location URL window.location.replace("/newpage/page.php?id=" + product_id); 

细节