使用 window.location.href 时,我想将 POST 数据传递到我打开的新页面。这可以使用 JavaScript 和 jQuery 吗?
使用 window.location.href 传递发布数据
IT技术
javascript
jquery
2021-01-30 07:51:56
6个回答
使用window.location.href
它不可能发送 POST 请求。
您需要做的是设置一个form
带有数据字段的标签action
,将表单的属性设置为 URL,将method
属性设置为 POST,然后调用标签submit
上的方法form
。
在 HTML 中添加一个表单,如下所示:
<form style="display: none" 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
,如何执行此操作取决于您使用的服务器端语言。
正如其他答案中所说,无法使用 window.location.href 发出 POST 请求,为此您可以创建一个表单并立即提交。
您可以使用此功能:
function postForm(path, params, method) {
method = method || 'post';
var form = document.createElement('form');
form.setAttribute('method', method);
form.setAttribute('action', path);
for (var key in params) {
if (params.hasOwnProperty(key)) {
var hiddenField = document.createElement('input');
hiddenField.setAttribute('type', 'hidden');
hiddenField.setAttribute('name', key);
hiddenField.setAttribute('value', params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});
使用这个文件:“jquery.redirect.js”
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
简短的回答:没有。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">
in<form name="login">
,则提交的名称将为login_name
. - 您可以将
nameJoiner
变量更改为其他内容,_
以免与您的输入命名方案冲突。 - 导入所有必要的表格后,请执行
submitMe.submit();
其它你可能感兴趣的问题