2

我一直在使用 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 似乎没有处理这个问题,除非在“?”之后添加值。在网址的末尾。但我更喜欢发布这些值,因为可能有很多数据被发送到 php 文件。我什至一直在玩 $.ajax 但不确定如何触发 pdf 为用户打开。

谢谢。

4

3 回答 3

2

您可以创建一个<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>
于 2012-08-19T19:20:19.310 回答
2

window.open()只能执行 GET 请求。如果您想使用 POST 获得相同的效果,则需要创建一个带有适当控件和目标的表单。

于 2012-08-19T19:20:52.033 回答
1

有一个使用 window.open() 发送 POST 数据的解决方案,它非常简单: Window.open 并通过 post 方法传递参数

它甚至可以在不涉及任何实际 HTML 代码的情况下仅使用纯 javascript 编程来制作。

// 编辑:添加 javascript only 解决方案:

<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>
于 2012-08-19T19:45:24.383 回答