jQuery通过AJAX调用传递文件
本文关键字:文件 调用 通过 AJAX jQuery | 更新日期: 2023-09-27 17:58:26
如果我有一个返回CSV的AJAX调用,我该如何让浏览器提示用户下载?下面,ProductsExport将返回成功数据中的CSV。我只需要将//传递文件到用户行替换为。。。
$.ajax({
type: "POST",
url: "/Search/ProductsExport",
data: $('#CustomerId').serialize(),
success: function (data) {
// Deliver file to user!!
},
error: function (xhr, textstatus, errorThrown) {
alert('Error');
}
})
我的C#代码在后端看起来是这样的:
var aFileContent = Encoding.ASCII.GetBytes(export);
var aMemoryStream = new MemoryStream(aFileContent);
return File(aMemoryStream, "text/plain",
string.Format("{0}.csv", CustomerId));
据我所知,你不能。您不能在这里使用ajax作为文件下载。YEs——根据jQuery,它是一种支持的数据类型,但不适用于文件。您需要通过链接或jQueryget请求链接到非ajax请求的文件。
请参阅:无法打开下载保存对话框和上的"datatype"http://api.jquery.com/jQuery.ajax/
问题的另一个解决方案是让AJAX函数返回一个实际的URL,该URL将下载csv(类似于您的C#后端代码)。然后客户端将使用window.open(URL)
为什么它必须是ajax?只需构建您的url并执行window.location.href即可执行您的调用。你似乎只传递了一个customerId,所以这应该很容易。
Ajax操作旨在允许用户在后台继续操作时留在页面上。文件下载会让用户留在页面上,只需下载文件,因此在这种情况下使用ajax没有任何好处。也许是这样的:
window.location.href = "/Search/ProductsExport?" + $.param($('CustomerId'))