知道表单提交何时完成

Know when Form submit finishes

本文关键字:何时完 表单提交      更新时间:2023-09-26

我有一个非常ajax的网站,它基本上是一个SPA,但我不会标记它,因为它不遵循所有准则。

我有一个商店,它驻留在页面上的div中,并通过jquery ajax和KNOCKOUT进行更新。我需要的最后一件事是从第三方网络服务下载pdf的能力。我可以使用以下内容下载pdf

<form action="/Dashboard/DownloadPdf" method="POST" style="display:none;" id="ProductDownload" data-bind="with: ProductToDownload">
    <input type="hidden" id="Name" name="Name" data-bind="value: Name"/>
    <input type="hidden" id="FileName" name="FileName" data-bind="value: FileName"/>
    <input type="hidden" id="Id" name="Id" data-bind="value: Id"/>
    <input type="hidden" id="Date" name="Date" data-bind="value: Date"/>
    <input type="hidden" id="Number" name="Number" data-bind="value: Number"/>
</form>

在提交表单之前,我使用挖空来填充产品下载。

$('

form').submit();

我希望能够做的是为用户提供一些指示,表明操作正在发生并已完成,例如在获取表单时抛出加载器。

我的问题在于能够知道form.submit()何时完成。

我怎么知道我的表单提交何时完成,以便我可以清理加载器等。

下面是我用来下拉 pdf 的代码,如果有人验证我是否正确,那就太好了。

[HttpPost]
    public void DownloadPdf(Product product)
    {
        var asr = Services.GetProduct(Token, product);
        Response.ClearHeaders();
        Response.ClearContent();
        Response.AppendHeader("Content-Disposition","attachment; filename=" + product.FileName);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(asr.Payload.Pdf);
        Response.End();
    }

请记住,我们不会在本地存储PDF,而是从其他服务请求它们。

Cory 在评论中的链接是一个很好的解决方案!我不得不对其进行一些调整,因为我的调用已经期望一个复杂的类型,并且我无法传递任何其他参数。

    function Download() {
    $('.storeView').before($('#Loading').html()); //Put up loading
    var attempts = 20;
    var cookieId = vm.ProductToDownload().FileName; // This name is being sent in the parameters
    var downloadTimer = setInterval(function() {
        var token = $.cookie(cookieId); // I used the jquery.cookie.js plugin to clean things up
        if (token || attempts === 0) {
            $('.k-loading-mask').remove();
            clearInterval(downloadTimer);
            $.removeCookie(cookieId);
        }
        attempts--;
    }, 1000);
    $('form').submit();
}

然后在我的服务器上

public ActionResult Download(Product product)
{
    .....
    System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie(product.FileName, product.FileName));
    .....
}