window.open将参数传递给php并触发pdf创建和查看
我一直在使用window.open指向一个php文件,在该文件中,我使用fpdf动态创建了一个pdf,并立即将其显示给用户。似乎可以在所有浏览器甚至移动设备上正常工作。例如:window.open将参数传递给php并触发pdf创建和查看,php,pdf,post,window.open,Php,Pdf,Post,Window.open,我一直在使用window.open指向一个php文件,在该文件中,我使用fpdf动态创建了一个pdf,并立即将其显示给用户。似乎可以在所有浏览器甚至移动设备上正常工作。例如: window.open('/client/feature_Schedule/scheduleReport.php','Schedule_Report','width=900,height=600,status=yes'); 在本例中,我没有传递任何值,因为php文件中已经存在所有需要的参数 但是现在我想传递javascr
window.open('/client/feature_Schedule/scheduleReport.php','Schedule_Report','width=900,height=600,status=yes');
在本例中,我没有传递任何值,因为php文件中已经存在所有需要的参数
但是现在我想传递javascript中的值,以便在创建pdf并向用户显示之前在php文件中查询数据库。有没有我应该知道的惯例?Window.open似乎无法处理此问题,除非在url末尾的“?”之后添加值。但是我更愿意发布这些值,因为可能会有很多数据被发送到php文件。我甚至一直在玩$.ajax,但不确定如何使用pdf触发以向用户打开
谢谢。您可以创建一个带有隐藏输入的
,并使用JavaScript提交表单。请注意target=“\u blank”
属性,该属性导致表单发布到新窗口
<a href="#" onclick="document.forms['pdfForm'].submit();return false;">Generate PDF</a>
<form target="_blank" id="pdfForm" name="pdfForm" method="POST">
<input type="hidden" name="param1" value="val1" />
<input type="hidden" name="param2" value="val2" />
</form>
window.open()只能执行GET请求。如果希望与POST具有相同的效果,则需要使用适当的控件和目标。有一种使用window.open()发送POST数据的解决方案,它非常简单: 它甚至可以不需要任何实际的HTML代码,只需要纯javascript编程 //编辑:添加了仅javascript的解决方案:
<input type="button" value="Open" onclick="openWindow();" />
<script>
function openWindow(){
// create <form>
var form = document.createElement('form');
form.method = 'POST';
form.action = 'process.php';
form.target = 'window_1'; // target the window
// append it to body
var body = document.getElementsByTagName('body')[0];
body.appendChild(form);
// create an element
var child1 = document.createElement('input');
child1.type = 'text'; // or 'hidden' it is the same
child1.name = 'elem1';
child1.value = 'some value';
// append it to form
form.appendChild(child1);
// create another element
var child2 = document.createElement('input');
child2.type = 'text'; // or 'hidden' it is the same
child2.name = 'elem2';
child2.value = 'some other value';
// append it to form
form.appendChild(child2);
// create window
window.open('', 'window_1');
// submit form
form.submit();
body.removeChild(form); // clean up
}
</script>
函数openWindow(){
//创造
var form=document.createElement('form');
form.method='POST';
form.action='process.php';
form.target='window_1';//以窗口为目标
//将其附加到正文中
var body=document.getElementsByTagName('body')[0];
子体(形式);
//创建一个元素
var child1=document.createElement('input');
child1.type='text';//或'hidden'相同
child1.name='elem1';
child1.value='some value';
//将其附加到表单中
表格.儿童(儿童1);
//创建另一个元素
var child2=document.createElement('input');
child2.type='text';//或'hidden'相同
child2.name='elem2';
child2.value=‘其他值’;
//将其附加到表单中
表格.儿童(child2);;
//创建窗口
窗口。打开(“窗口1”);
//提交表格
表单提交();
body.removeChild(form);//清理
}
出于好奇,“大量数据”是什么意思?许多参数?长参数?发送的参数字符串的长度可能相当长。如果一个url的最大长度是7000多个字符(我不确定),那么url的长度可能会更长。这就是为什么我想用POST来代替。这听起来像是正确的逻辑吗?此外,我将致力于应用下面的答案以及其他答案。伟大的论坛!我很感激你的迅速反应。不知道是什么让我花了这么长时间才使用它。如果成功,将提供一些反馈。谢谢。问得好@IgnacioVazquez Abrams。我能够按照伊凡发布的链接的逻辑,它解决了我的问题。虽然不像我希望的那样干净,但它确实有效。谢谢。@Ignacio Vazquez Abrams和ryan77我已经添加了javascript唯一的解决方案。。。希望能有帮助