我一直在使用window.open指向一个php文件,在该文件中,我使用fpdf动态创建了一个pdf,并立即将其显示给用户。似乎可以在所有浏览器甚至移动设备上正常工作。例如:
window.open('/client/feature_Schedule/scheduleReport.php','Schedule_Report','width=900,height=600,status=yes');
在这个例子中我没有传递任何值,因为php文件中已经存在所有需要的参数。
但现在我想传递javascript中的值,以便在创建pdf并将其显示给用户之前查询php文件中的数据库。有什么惯例我应该知道吗?Window.open似乎无法处理此问题,除非在url末尾的"?"后面添加值。但我更喜欢POST值,因为可能有很多数据被发送到php文件。我甚至一直在玩$.ajax,但不知道如何用pdf触发为用户打开。
谢谢。
window.open()
只能执行GET请求。如果您想使用POST获得相同的效果,则需要创建一个具有适当控件和目标的表单。
您可以创建一个带有隐藏输入的<form>
,并使用JavaScript提交表单。请注意,target="_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()发送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>
使用PHP,您可以简单地将参数包含在GET语句中
window.open('/client/feature_Schedule/scheduleReport.php?parameter='.$value,'Schedule_Report','width=900,height=600,status=yes');