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));

jQuery通过AJAX调用传递文件

据我所知,你不能。您不能在这里使用ajax作为文件下载。YEs——根据jQuery,它是一种支持的数据类型,但不适用于文件。您需要通过链接或jQueryget请求链接到非ajax请求的文件。

请参阅:无法打开下载保存对话框和上的"datatype"http://api.jquery.com/jQuery.ajax/

问题的另一个解决方案是让AJAX函数返回一个实际的URL,该URL将下载csv(类似于您的C#后端代码)。然后客户端将使用window.open(URL)

启动URL

为什么它必须是ajax?只需构建您的url并执行window.location.href即可执行您的调用。你似乎只传递了一个customerId,所以这应该很容易。

Ajax操作旨在允许用户在后台继续操作时留在页面上。文件下载会让用户留在页面上,只需下载文件,因此在这种情况下使用ajax没有任何好处。也许是这样的:

window.location.href = "/Search/ProductsExport?" + $.param($('CustomerId'))