提交事件后捕获(无ajax)

时间:2017-09-29 16:11:57

标签: javascript jquery html asp.net-mvc

我有一个返回文件的后端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没有改变,如何捕获和处理“提交后”事件(实际上是在下载完成时)。

谢谢。

1 个答案:

答案 0 :(得分:0)

我过去使用过的技巧是使用cookie来表明下载是否已经完成。

以下是我过去的做法:

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

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

  • 提交请求

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

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