使用window.location.href时,我想将POST数据传递给我正在打开的新页面。这可能使用JavaScript和jQuery吗?
答案 0 :(得分:72)
使用window.location.href
无法发送POST请求。
您需要做的是设置一个包含数据字段的form
标记,将表单的action
属性设置为URL,将method
属性设置为POST,然后在submit
代码上调用form
方法。
答案 1 :(得分:69)
在HTML中添加一个表单,如下所示:
<form style="display: hidden" action="/the/url" method="POST" id="form">
<input type="hidden" id="var1" name="var1" value=""/>
<input type="hidden" id="var2" name="var2" value=""/>
</form>
并使用JQuery来填充这些值(当然你也可以使用javascript来做类似的事情)
$("#var1").val(value1);
$("#var2").val(value2);
然后最后提交表格
$("#form").submit();
在服务器端,您应该能够通过选中var1
和var2
来获取您发送的数据,如何执行此操作取决于您使用的服务器端语言。
答案 2 :(得分:8)
简答:不。 window.location.href
无法传递POST数据。
更令人满意的答案:您可以使用此功能克隆所有表单数据并提交。
var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
// so that you can differentiate between forms when
// processing the data server-side.
submitMe.importFields = function(form){
for(k in form.elements){
if(input = form.elements[k]){
if(input.type!="submit"&&
(input.nodeName=="INPUT"
||input.nodeName=="TEXTAREA"
||input.nodeName=="BUTTON"
||input.nodeName=="SELECT")
){
var output = input.cloneNode(true);
output.name = form.name + nameJoiner + input.name;
this.appendChild(output);
}
}
}
}
submitMe.importFields(form_element);
。 <input name="email">
中有<form name="login">
,则提交的名称将为login_name
。< / LI>
nameJoiner
变量更改为_
以外的其他变量,这样就不会与您的输入命名方案发生冲突。submitMe.submit();
答案 3 :(得分:6)
使用此文件:&#34; jquery.redirect.js&#34;
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
答案 4 :(得分:4)
正如在其他答案中所说的那样,无法使用window.location.href发出POST请求,要做到这一点,您可以创建一个表单并立即提交。
您可以使用此功能:
<ul class="list-inline">
<li class="list-inline-item">Lorem ipsum</li>
<li class="list-inline-item">Phasellus iaculis</li>
<li class="list-inline-item">Nulla volutpat</li>
</ul>
答案 5 :(得分:3)
就像这一样简单
$.post( "som_page.php", { data1: value1 , data2: value2 .... } ).done(function( data ) { $( "body" ).html(data);});
我必须解决这个问题才能对我的应用程序进行屏幕锁定,我必须将敏感数据作为用户和他正在工作的URL传递。然后创建一个执行此代码的函数
答案 6 :(得分:2)
您是否考虑过使用本地/会话存储? - 或 - 取决于您正在建设的复杂性;你甚至可以使用indexDB。
注意:
Local storage
和indexDB
不安全 - 因此您希望避免在其中任何一个中存储任何敏感/个人数据(即姓名,地址,电子邮件地址,DOB等)。
Session Storage
都是一个更安全的选项,只有设置项目的原点才能访问它,并且一旦浏览器/标签关闭,它就会被清除。
IndexDB
稍微多一点[但并不多]复杂,并且是30MB noSQL database
内置于每个浏览器中(但如果用户选择,则基本上可以无限制) - &gt;下次使用Google文档时,请打开DevTools - &gt;申请 - &gt; IndexDB并走高峰。 [剧透警报:已加密]。
关注Local
和Session Storage
;这些都很简单易用:
// To Set
sessionStorage.setItem( 'key' , 'value' );
// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth's Frozen Bananas", ... } );
// Get The Data
const fromData = sessionStorage.getItem( 'key' );
// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );
// Remove
sessionStorage.removeItem( 'key' );
// Remove _all_ saved data sessionStorage
sessionStorage.clear( );
如果简单不是你的事 - 或者 - 你可能希望走出去并尝试不同的方法 - &gt;你可以使用shared web worker
...你知道,只是为了踢。
答案 7 :(得分:1)
我对此使用了非常不同的方法。我在客户端中设置了浏览器 cookie,该 cookie 在我设置 window.location.href
后一秒过期。
这比在 URL 中嵌入参数更安全。
服务器以cookie的形式接收参数,发送后浏览器立即删除cookie。
const expires = new Date(Date.now() + 1000).toUTCString()
document.cookie = `oauth-username=user123; expires=${expires}`
window.location.href = `https:foo.com/oauth/google/link`
答案 8 :(得分:-4)
您可以使用GET代替pass,但不要将此方法用于重要值,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
在CustomerBasket.php
中<?php
$value = $_GET["oridd"];
echo $value;
?>