Javascript 知道表单提交何时完成

Javascript 知道表单提交何时完成,javascript,forms,asp.net-mvc-4,Javascript,Forms,Asp.net Mvc 4,我有一个非常重ajax的网站,它基本上是一个SPA,但我不会给它贴标签,因为它没有遵循所有的指导原则 我有一个存储,它位于页面上的一个div中,并通过jqueryajax和knockout进行更新。我需要的最后一件事是能够从第三方web服务下载pdf。我可以使用以下工具下载pdf <form action="/Dashboard/DownloadPdf" method="POST" style="display:none;" id="ProductDownload" data-bind="

我有一个非常重ajax的网站,它基本上是一个SPA,但我不会给它贴标签,因为它没有遵循所有的指导原则

我有一个存储,它位于页面上的一个div中,并通过jqueryajax和knockout进行更新。我需要的最后一件事是能够从第三方web服务下载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>

请记住,我们不在本地存储PDF,我们从其他服务请求它们。科里的评论链接是一个很好的解决方案!我不得不对它进行一些调整,因为我的调用已经需要一个复杂的类型,我无法传递任何其他参数

    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));
    .....
}

您是否使用JQuery通过AJAX提交表单?没有,因为我的理解是,如果我这样做,我将无法返回PDF这里有一个类似的问题:@Cory您发布的链接看起来是一个很好的答案,但是如果我已经发送了一个复杂的类型,我可以使用它吗?我的签名可以下载PDF(产品、字符串下载令牌)吗?我无法修改产品对象,因为它已经在预期中。@Cory如果您将您的评论移动到答案,我将接受它。
public ActionResult Download(Product product)
{
    .....
    System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie(product.FileName, product.FileName));
    .....
}