【发布时间】:2019-07-22 21:46:31
【问题描述】:
我正在尝试在文件转换时制作加载器。
我正在使用 Nodejs 并且我正在转换一个文件,我正在使用 AJAX Get 请求调用我的 API,然后它在完成使用内容处置文件可供下载时开始转换文件,因此我想制作一个供用户等待的加载器。
但我面临一个问题,即在我的 Nodejs 请求发送 res 数据时如何检查 AJAX 成功调用
AJAX 代码
function download()
{
var id ='{{@root.meta.id}}';
$.ajax({
url: "/getdownload",
data: { id: id },
type: "GET",
dataType: "json",
beforeSend: function () {
$("#loading_img1").css('display', 'inline');
},
success: function (data) {
alert("Success");
$("#loading_img1").css('display', 'none');
},//success
error: function (jqxhr, status, exception) {
alert('Sorry Try Again.', exception);
},//error
always: function (xhr, status) {
alert("The request is complete!");
}//always
});
}
Nodejs 代码:
...
fs.readFile('/Users/apple/Desktop/'+output, function (err, content) {
if (err) {
res.writeHead(400, {
'Content-type': 'text/html'
})
console.log(err);
//res.redirect('/');
} else {
//specify Content will be an attachment
res.setHeader('Content-disposition', 'attachment; filename=' + output);
res.end(content);
}
});
问题是它在数据中发送响应,我无法解决这个问题,我希望在服务文件加载器结束之前调用加载器并通过此方法下载文件。
编辑: 您可以假设当有人尝试转换文件时,它会显示等待时间/百分比转换,这就是我想要实现的。谢谢
【问题讨论】:
-
普遍的共识是,在 ajax 响应中返回文件不起作用,因为 javascript 可以显示另存为/下载对话框。快速查看 SO 答案分为两部分 - 保存文件服务器端然后重定向到该文件,或重定向到处理文件。既不使用 ajax 来下载文件。示例:stackoverflow.com/questions/27785819/…
-
我之前使用的是窗口位置,但我的老板告诉我这样做:(你可以假设当有人试图转换文件时,它会显示等待时间/百分比转换这就是我想要的实现。谢谢
-
如果您的老板告诉您如何实现无法实现的结果,那么他们需要指导您。您不能仅从 Javascript 保存到文件。它需要重定向或新标签来打开自动下载的内容。也可以创建一个下载链接并单击它,但不是在所有浏览器中,也不要期望它总是可行的。有充分的理由阻止从代码自动下载。
-
另外,不要试图显示剩余时间或完成百分比,因为这要复杂得多。我建议使用简单的微调器类型图形来显示进程正忙。
-
1) 显示正在进行的动画 2) 进行 ajax 调用 3) 在服务器上,构建文件,并保存到服务器 4) 返回文件是 "准备好”,带有指向(临时)文件的链接 5) location.href 指向新生成的文件。解决您的所有问题。