我显示一个等待对话框然后我用文件的url创建一个iframe并将其附加到文档中。
Neptune.ShowWaitingDialog();
iFrame.src = "ExportReportAllMediaDetailsCsv/?" + $.param(object);
iFrame.style.display = "none";
iFrame.onload = function () {
parent.Neptune.CloseWaitingDialog();
};
document.body.appendChild(iFrame);
如果服务器端出现错误,iFrame.onload函数会相应地执行并且等待对话框关闭,但是如果返回一个文件,onload函数就不会被执行而等待对话框保持打开状态。
我的问题是,如果返回一个文件,iframe是否会刷新,从而导致onload事件执行? 如果没有,那么有没有办法检测文件是否已被返回?
答案 0 :(得分:4)
我这样做的方式,取自T.J.克劳德对this old question of mine的回答是:
添加一个名为“nonce”的隐藏表单字段或GET参数(或任何你想要的)。在页面创建时或使用JavaScript填充唯一编号或随机字符串。
在服务器上,查找“nonce”参数并添加名为“FILE_READY”(或任何您想要的)的cookie,并将其值设置为nonce值。像往常一样返回文件。
在客户端上,当设置表单帖子或iframe“src”时 - 换句话说,当您启动文件下载时 - 启动JavaScript间隔计时器以检查“FILE_READY”的当前值曲奇饼。检查每100毫秒左右;它不一定非常频繁。
只要“FILE_READY”cookie具有“nonce”参数中发送的值,您就会知道HTTP响应已从服务器返回。
像魅力一样。