使用AJAX调用将文件传送给jQuery

21 浏览
0 Comments

使用AJAX调用将文件传送给jQuery

如果我有一个返回CSV文件的AJAX调用,如何让浏览器提示用户下载?在下面的代码中,ProductsExport将在成功返回数据的情况下返回CSV文件。我只需要知道如何替换// Deliver file to user这一行代码...

$.ajax({

type: "POST",

url: "/Search/ProductsExport",

data: $('#CustomerId').serialize(),

success: function (data) {

// 提示用户下载文件!!

},

error: function (xhr, textstatus, errorThrown) {

alert('错误');

}

})

我的后端C#代码如下:

var aFileContent = Encoding.ASCII.GetBytes(export);

var aMemoryStream = new MemoryStream(aFileContent);

return File(aMemoryStream, "text/plain",

string.Format("{0}.csv", CustomerId));

0
0 Comments

问题的原因是无法使用AJAX调用来进行文件下载。尽管jQuery中支持使用AJAX的数据类型,但不适用于文件下载。对于非AJAX请求,需要通过链接或者jQuery的get请求来链接到文件。

解决方法可以参考以下两个链接:

- [Unable to open download save dialog](https://stackoverflow.com/questions/4522590)

- [jQuery.ajax()中的"datatype"](http://api.jquery.com/jQuery.ajax/)

0
0 Comments

问题的出现原因是使用AJAX调用交付文件时,不必要地使用了AJAX,而应该使用window.location.href来执行调用。AJAX操作的目的是允许用户在后台继续操作的同时保持在页面上,而文件下载只是将文件下载到用户的设备上,因此在这种情况下使用AJAX没有任何好处。解决方法是使用window.location.href来执行调用,可以按照以下方式实现:

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

0
0 Comments

问题原因:在使用AJAX调用时,需要通过文件下载的方式将文件传递给客户端。然而,使用jQuery的AJAX方法并不能直接实现文件下载的功能。

解决方法:为了解决这个问题,可以采用以下方案:在AJAX函数中返回一个实际的URL,并使用window.open(url)来启动该URL下载文件。

代码示例:

$.ajax({
    url: 'your_ajax_url',
    type: 'GET',
    data: {params: your_params},
    success: function(response) {
        var fileUrl = response.fileUrl; // 假设服务器返回的响应中包含了文件的下载URL
        window.open(fileUrl); // 启动URL下载文件
    }
});

这样,当AJAX请求成功后,客户端会通过window.open()方法打开返回的文件下载URL,从而实现文件的下载功能。

0