【问题标题】:jQuery event after a PDF loads?PDF加载后的jQuery事件?
【发布时间】:2020-02-18 22:26:20
【问题描述】:

我有一个模态对话框,允许用户生成自定义 PDF。在他们单击“开始”按钮后,页面会使用 window.location 重定向到控制器,然后控制器会创建 PDF 并将其返回。

由于 PDF 需要多长时间才能返回,我想显示一个模式“生成 PDF”对话框,一旦 PDF 完成并返回,该对话框会自动关闭。

问题是我不知道如何/何时执行该最终功能以关闭“生成 PDF” 对话框。由于控制器返回一个应用程序/pdf 类型,所以没有要附加的文档对象事件,对吧?最好的方法是什么?

【问题讨论】:

    标签: jquery asp.net-mvc dom mime-types jquery-events


    【解决方案1】:

    我会这样做

    1. 用户点击链接创建pdf

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

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

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

    5. 服务器在 (n) 秒后返回状态为 completed/failed 和指向 pdf

    6. 客户端隐藏模型/动画,停止 ping 并在新选项卡中打开链接,这将 下载pdf

    【讨论】:

      【解决方案2】:

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

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

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

      验证它,从安全位置检索 PDF 并将其返回。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 如果他说创建 pdf 是一项耗时的任务,这将为该问题提供一个不错的解决方案,但问题是返回 pdf 需要多长时间。这个解决方案不会解决这个问题
        • @GregH 控制器(他和我的控制器)需要相同的时间来生成 pdf。
        • 谢谢,这基本上就是我所做的。我只是让第一个控制器操作返回一个字符串键,然后我可以使用它来访问第二个控制器操作中的 PDF。谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        相关资源
        最近更新 更多