我有 3 个 php 文件:request.php
、action.php
、mail.php
。
request.php
生成页面,根据 ajax 发送的POST
数据填充不同的数据。它以表单形式开始,具有多个字段。当您单击submit
按钮时,ajax 会通过 POST
将表单数据发送到action.php
。 然后,action.php
处理数据,将其存储在数据库中,并生成一个 html div
,以干净地布置数据。 然后action.php
使用html2canvas
和jsPDF
将html div
成pdf,然后通过jquery传递给mail.php
POST
与phpmailer
一起通过电子邮件发送出去。 然后,action.php
生成一条成功消息,该消息将发送给request.php
并显示。
但是,action.php
内将pdf发送到mail.php
的javascript总是无法运行。我已经尝试了多种方法来做到这一点,但我似乎无法找到另一种将所有数据传递到需要的地方的方法,因为数据需要传递两次:首先作为原始数据数组,然后作为 html2canvas
和 jsPDF
生成的 pdf。
如果我在action.php
里面放置一个隐藏的mail.php
iframe
,它将运行良好并发送电子邮件,但它将是一个空的pdf,没有填充request.php
中的任何数据(显然(。
我可以想到一些潜在的解决方案,但我无法弄清楚如何实现它们:
1(似乎问题是javascript不喜欢嵌套运行,但也许有一种方法可以强制action.php
中的javascript代码运行,以便生成pdf并发送到mail.php
。
2(也许有一种方法可以只用一个我没有看到的数据传递来完成这一切。
3(也许在action.php
内部有一种方法可以将数据数组传递给process.php
的iframe
,这将格式化htmldiv并生成pdf,然后将其发送给mail.php
,但我认为即使我可以完成,我也会遇到同样的javascript问题,process.php
无法运行并将pdf发送到mail.php
。
你对 JavaScript 和 PHP 如何协同工作有一个相当正常的(刚开始的(误解。PHP 在您的服务器上运行。JavaScript 在用户的浏览器上运行。根据您上面的内容,您要做的是:
- 通过
request.php
加载初始页面 - 使用
action.php
处理数据请求并将格式化表发送到 JS - 让 JS 将该表发送到
mail.php
你应该做什么:
- 通过
request.php
加载初始页面 - 使用
action.php
处理数据请求- 有
action.php
调用mail.php
,给它桌子 action.php
将表发送回 JS
- 有
mail.php
通过电子邮件发送表格
你问为什么 JavaScript 从不运行以将数据发送到第三个脚本,那是因为你可能永远不会调用它。更重要的是,正如我上面所示,你不需要它:只需action.php
打电话mail.php
。
也许不是我想要的答案,但由于我知道我不想像 Matthew 建议的那样使用 php pdf 创建,这最终对我有用。
由于request.php
无论如何都有适用于action.php
的 javascript,我最终将 html 表从 action.php
发送回 request.php
,然后request.php
调用mail.php
。