我需要打开一个带有Http POST请求的浏览器页面。或者我可以使用GET请求打开,这是默认设置,但是我需要传递大量无法在查询字符串中传递的数据。
有什么想法吗?
答案 0 :(得分:1)
魔术是使用target
元素的form
属性。您可以使用带有以下代码的JavaScript进行提交
<script type="text/javascript">
function openWindowWithPost(url, data) {
var dataForm = document.createElement("form");
dataForm.style.display = "none";
dataForm.target = "TargetWindow";//Make sure the window name is same as this value
dataForm.method = "POST";
dataForm.action = url;
for (var key in data) {
var postData = document.createElement("input");
postData.type = "hidden";
postData.name = key;
postData.value = data[key];
dataForm.appendChild(postData);
}
document.body.appendChild(dataForm);
var postWindow = window.open("", "TargetWindow", "status=0,title=0,height=600,width=800,scrollbars=1");
if (postWindow) {
dataForm.submit();
} else {
alert('You must allow popups for this map to work.');
}
//For testing invoking this function
openWindowWithPost("http://google.com", {q: 'search', from: 'custom'})
}
</script>
使用
可以实现相同的行为<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8" /><title>Test</title></head>
<body>
<form method="POST" enctype="multipart/form-data" target="TargetWindow" action="http://google.com" onsubmit="openTargetWindowAndSubmit()">
<input type="file" accept="image/*" />
<input type="submit" value="Submit"/>
</form>
<script type="text/javascript">
function openTargetWindowAndSubmit() {
//We are just making sure the target window is available before submiting the form
window.open("", "TargetWindow", "status=0,title=0,height=600,width=800,scrollbars=1");
}
</script>
</body>
</html>
注意:简单地使用target='_blank'
或target='TargetWindow'
通常会打开一个新标签。当新标签对您没问题时,这很好。但是,当您想要在POP UP窗口中提交时,需要提供window
width
和height
。
答案 1 :(得分:0)
因此,您唯一的选择是创建表单,将目标设置为_blank,然后触发提交。
<form action="/action" method="post" target="_blank" id="frm">
<input type="hidden" name="foo" value="your huge string">
</form>
您可以使用JavaScript创建并提交。
document.getElementById("frm").submit()