jQuery PDF 加载后的事件?

jQuery event after a PDF loads?

我有一个允许用户生成自定义 PDF 的模式对话框。在他们单击 "Start" 按钮后,页面会使用 window.location 重定向到控制器,然后控制器会创建 PDF 并 return 发送它。

由于 PDF 需要多长时间才能 return,我想显示一个模态 "Generating PDF" 对话框,该对话框会在 PDF 完成并 returned 后自动关闭。

问题是我无法弄清楚 how/when 执行最终功能以 关闭 "Generating PDF" 对话框。由于控制器 return 是 application/pdf 类型,因此没有要附加的文档对象事件,对吧?执行此操作的最佳方法是什么?

重定向到控制器,创建您的 pdf 并保存它。控制器应该 return 在保存 pdf 后 一个关闭模式并重定向到另一个控件的 js,它只读取和响应 pdf 文件。

我会这样做

  1. 用户点击 link 创建 pdf

  2. 向服务器发送AJAX请求生成pdf

  3. 服务器将 pdf 创建添加到后台作业,returns 状态为 added

  4. 客户端收到状态,显示模型或动画并开始ping 服务器每 3 秒一次状态

  5. 服务器 returns (n) 秒后的状态为 completed/failed 和 link pdf

  6. 客户端隐藏 model/animation,停止 ping 并在新选项卡中打开 link,这将 下载 pdf

感谢您的回复。 @PGill 走在正确的轨道上。我简化了他的方法:

  1. 用户单击“开始”按钮
  2. 显示 "Generating PDF" 模态对话框
  3. 向控制器 1 发送了一个 AJAX 请求以生成 PDF
  4. 控制器 1 创建 PDF(需要 5-60 秒),将其存储在安全位置,并returns一个唯一密钥
  5. "Generating PDF" 模态对话框已隐藏
  6. 浏览器被重定向到控制器 2 并发送唯一密钥
  7. 控制器 2 验证密钥,从安全位置检索 PDF,returns 它

这里的解决方案是将 PDF 的生成和 PDF 的下载分成 2 个步骤,以便在它们之间隐藏模态对话框。

验证它,从安全位置检索 PDF 并 returns 它。

ShowModalDialog();

$.ajax({
  type: "GET",
  url: 'GeneratePDFReportForDownload?' + params,
  success: function (pdfkey, textStatus, jqXHR) {
      HideModalDialog();
      window.location = 'DownloadPDFReport?key=' + pdfkey;
  },
  async: true,
  datatype: 'json'
});