我浏览了十几页问题“如何从jQuery下载文件”,但仍未找到简单的解决方案。
我的jQuery里面有ajax:
$.ajax({
url: "/Home/SaveQBMatter",
type: "POST",
data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }),
dataType: "json",
traditional: true,
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.status == "Success") {
var DownloadableFile = data.message;
//HERE I NEED TO DOWNLOAD FILE
alert("Success! You will be redirect to the Home Page.");
var url = '@Url.Action("Index", "Home")';
window.location.href = url;
} else {
alert("Error occurs on the Database level!");
}
},
error: function () {
alert("An error has occured!!!");
}
});
此处data.message
我正在回复行动SaveQBMatter
完整文件路径
我需要的是让我的用户在重定向之前下载此文件。有什么帮助吗?
注意:如果需要此信息,我正在使用ASP.NET MVC
答案 0 :(得分:1)
尝试使用此插件下载文件: http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
答案 1 :(得分:1)
你可以这样做,在成功的ajax调用之后,执行location.href = data.message;正如你所说的data.message是文件的完整路径。有了它,它应该下载文件而不重定向浏览器。此外,当您下载文件时,请确保您具有标题强制下载。
您可以在此处查看有关强制下载的详情: http://www.symkat.com/force-download-with-http-headers
然后,做一个setTimeout让我们说1到2秒,你可以调整你喜欢的时间,让下载初始化和重定向。所以你的代码看起来像这样:
$.ajax({
url: "/Home/SaveQBMatter",
type: "POST",
data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }),
dataType: "json",
traditional: true,
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.status == "Success") {
var DownloadableFile = data.message;
location.href = DownloadableFile;
setTimeout(function() {
alert("Success! You will be redirect to the Home Page.");
var url = '@Url.Action("Index", "Home")';
window.location.href = url;
}, 1000);
} else {
alert("Error occurs on the Database level!");
}
},
error: function () {
alert("An error has occured!!!");
}
});
答案 2 :(得分:0)
如果用户浏览器未阻止,请尝试在新窗口中打开网址:
if (data.status == "Success") {
window.open(data.message, "_blank")
如果您在打开文件时遇到问题而不是下载,可以尝试从ASP发送内容处置标头,如:
Content-Disposition: attachment; filename="filename.extension"