【问题标题】:Capture after submit event (no ajax)提交事件后捕获(无 ajax)
【发布时间】:2017-09-30 00:20:15
【问题描述】:

我有一个返回文件的后端 API 方法(ASP.NET MVC):

[HttpPost]
public ActionResult GenerateReport(string param1, string param2)
{
    try
    {
        string fn = SomeMethodThatGenerateAnExcelFileAndReturnItsFullPath(param1, param2);
        return File(fn, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", Path.GetFileName(fn));
    }
    catch (Exception e)
    {
        log.Error(e);
        throw;
    }
}

我在前端有一个表单:

<form id="genForm" action="@Url.Action("GenerateReport", "Report")" method="POST">
    <div class="card border-primary">
        <div class="card-header">Report parameters</div>
        <div class="card-body">
            <div class="dx-fieldset">
                <!-- inputs and params -->
                <div class="dx-field">
                    <div class="dx-field-label"></div>
                    <button class="dx-field-value" id="btn-generate"></button>
                </div>
            </div>
        </div>
    </div>
</form>

还有一个提交表单的 javascript 事件:

<script type="text/javascript">
    $("#btn-generate").click(function() {
        // some other modifications
        $("#genForm").submit();
    })
</script>

使用此代码,当我单击生成按钮时,它会向服务器发出请求(页面正在刷新)并下载文件(下载完成后页面停止刷新)。发布和下载时浏览器正在加载,但页面的 DOM 之后没有改变。

我的问题是,由于 DOM 没有改变,如何捕获和处理“提交后”事件(实际上是在下载完成时)。

谢谢。

【问题讨论】:

    标签: javascript jquery html asp.net-mvc


    【解决方案1】:

    我过去使用的技巧是使用 cookie 来指示下载是否完成。

    这是我过去的做法:

    • 创建一个 iframe 作为提交的目标;这只是为了让您可以捕获“加载”事件以检查 cookie。

    • 捕获该 iframe 上的加载事件以检查 cookie ...当 cookie 存在时,您知道下载已完成。 (更重要的是,cookie的值可以给你更多的信息)

    • 提交请求

    • 文件下载后,删除 iframe 并根据需要运行其他代码。

    我一直使用 iframe,但这可能也适用于 window.open()。

    【讨论】:

    • 所以我想这没有实际的解决方案?
    猜你喜欢
    • 2012-05-10
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多