开始下载文件时如何从浏览器获得响应?

时间:2019-06-03 11:30:51

标签: javascript jquery browser download

我想在下载开始时得到响应,我正在提交一个html表单发布的表单,我得到一个文件作为返回,该文件已经在控制器中刷新了。因此服务器端没有响应。有什么方法可以让浏览器响应以了解下载是否开始?

function GenerateReport() {
    debugger;
    ChangeButtonPatchView("Report", "buttonPatch", "DisabledGenerateRpt");
    $('#Action').val('Report');
    $('#btnPrintOrSaveReport').trigger('click');
    setInterval(function () {
        ChangeButtonPatchView("Report", "buttonPatch", "SCurvePercentageComplete");      
    },2000);  
}

在此代码中触发了提交按钮。我想检查浏览器在此功能中的响应

2 个答案:

答案 0 :(得分:1)

如果触发常规下载,则无法单独监视从Javascript的下载状态。扩展程序可以使用下载API(Chrome / FF)来查询下载进度,而页面可以使用XMLHttpRequest and the onProgress event来进行下载,但是目前没有主流浏览器可以使用仅使用Java脚本即可查询下载进度。

如果您可以将下载内容卸载到服务器端脚本,则可以track the download using a unique token

答案 1 :(得分:0)

这是我的尝试,并且工作正常。 在Controller中,我添加了一个Cookie

HttpCookie dwnloadResponse = new HttpCookie("dwnloadResponse");
                dwnloadResponse["Complete"] = "true";
                Response.Cookies.Add(dwnloadResponse);

并使用此cookie名称在javascript中进行检查。

function GenerateReport() {
debugger;
ChangeButtonPatchView("Report", "buttonPatch", "DisabledGenerateRpt");
$('#Action').val('Report');
$('#btnPrintOrSaveReport').trigger('click');
_responseCheckTimer = setInterval(function () {
    debugger;
    if (document.cookie.indexOf('dwnloadResponse') !== -1) {
        ChangeButtonPatchView("Report", "buttonPatch", "SCurvePercentageComplete");
        var d = new Date();
        d.setTime(d.getTime() + 0);
        var expires = "expires=" + d.toUTCString();
        document.cookie = "dwnloadResponse=" + ";" + expires + ";path=/";
        clearTimeout(_responseCheckTimer);
    }      
},1000);          

}

这将检查cookie在浏览器中是否可用。如果cookie不存在,它将返回-1值。然后,我们将删除Cookie并停止计时器。