Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
window.open将参数传递给php并触发pdf创建和查看_Php_Pdf_Post_Window.open - Fatal编程技术网

window.open将参数传递给php并触发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指向一个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末尾的“?”之后添加值。但是我更愿意发布这些值,因为可能会有很多数据被发送到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唯一的解决方案。。。希望能有帮助