我显示一个等待对话框,然后使用文件的 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 事件执行吗? 如果没有,那么有没有办法检测文件是否已返回?
最佳答案
我这样做的方式,摘自 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 响应已从服务器返回。
就像魅力一样。
关于javascript - 文件下载后 iframe onload 不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301711/