jQuery使用AJAX调用传递文件

如果我有一个返回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作为文件下载。 YE – 根据jQuery支持数据类型,但不支持文件。 您需要通过链接或jQuery get请求链接到该文件以获取非Ajax请求。

请参阅: 无法在http://api.jquery.com/jQuery.ajax/上打开下载保存对话框和“数据类型”

您的问题的替代解决方案是让AJAX函数返回将下载csv的实际URL(类似于您的C#backendcode)。 然后客户端将使用window.open(url)启动URL

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

Ajax操作旨在允许用户在幕后操作继续时保持在页面上。 文件下载将使用户保持在页面上并只下载文件,因此在此过程中使用ajax没有任何好处。 也许这样的事情:

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