在我的网页中,我有一个用于下载文件的按钮。如果没有要下载的文件,那么我想在同一页面上显示一条消息。当有文件要下载时,以下 javascript 代码有效(id 是文件 id):
function downloadFile(id) {
window.location = '/myapp.com/download_file/' + id;
}
我的服务器将文件内容写入响应正文并将“Content-Disposition”标头设置为“附件”。
现在,当没有文件时,我想返回一些文本,说明没有要下载的文件。所以我想做如下的事情:
function downloadFile(id) {
$.ajax({
url: '/myapp.com/download_file/' + id,
success: function () {
//if (attachemnt) {
// download file: just pass response to the browser?
//} else {
// show error text
//}
},
error: function () {
//show error message
}
});
}
所以,我的问题是:
- 如何实现上述功能?
- 具体来说,如果响应中有附件文件,是否可以将响应传递给浏览器,以便浏览器处理文件下载?
更新:我现在可以处理“无文件”的情况:
$.ajax({
url: '{{ path('download_prev_other_data', {'other_data_id':form.vars.value.getOtherDataId() }) }}',
success: function (data, textStatus, jqXHR) {
var header = jqXHR.getResponseHeader('Content-Disposition');
if (header && header.indexOf('attachment') === 0) {
//pass the original response to the browser
} else {
alert(data); //data is just text in my case explaining there was no file
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
因此,我的第二个问题“如何将原始响应传递给浏览器”尚未得到解答。