我想在下载开始时得到响应,我提交的表单是html表单,我得到一个文件作为返回,该文件已经在控制器中刷新了。因此服务器端没有响应。有什么方法可以让浏览器获得响应,以了解下载是否开始?
function GenerateReport() {
debugger;
ChangeButtonPatchView("Report", "buttonPatch", "DisabledGenerateRpt");
$('#Action').val('Report');
$('#btnPrintOrSaveReport').trigger('click');
setInterval(function () {
ChangeButtonPatchView("Report", "buttonPatch", "SCurvePercentageComplete");
},2000);
}
在此代码中,触发了提交按钮。我想在此功能中检查浏览器响应
如果触发常规下载,则无法单独从Javascript监视下载状态。扩展程序可以使用下载API(Chrome / FF)来查询下载进度,而页面可以使用XMLHttpRequest and the onProgress event来执行相同操作,但是目前没有主流浏览器可以查询下载进度仅使用Javascript下载。
但是,如果您可以将下载内容卸载到服务器端脚本中,则可以track the download using a unique token。
这是我的尝试,工作正常。在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并停止计时器。