我正在使用C#和JavaScript。我的目标是发送一个导致下载CSV文件的ajax请求。 CSV将在服务器端的ashx页面中生成。目前,该应用程序能够下载CSV,但使用表单而不是AJAX请求,但后端代码是相同的。
这是我失败的ajax请求:
$.ajax({
url: "myDir/x.ashx/exportAllData",
type: 'POST',
data: {
id:8
},
success: function(ajaxResult){
console.log(ajaxResult);
}
});
以下是可行的Form方法:
var $form = $(document.createElement('form'))
.attr({
action: 'myDir/x.ashx/exportAllData',
method: 'POST'
})
.css('display', 'none')
.appendTo('body');
$form.submit();
$form.empty().remove();
以下是处理程序(C#)中的代码,对于上述两种情况都是相同的:
else if(action == "exportalldata")
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("test1,test2,test3,test4,test5");
context.Response.Clear();
context.Response.ContentType = "application/csv";
context.Response.AddHeader("Content-Disposition", "attachment;filename=data.csv");
context.Response.Write(sb.ToString());
context.Response.End();
}
答案 0 :(得分:1)
简短的回答是你不能。浏览器无法通过ajax下载文件。必须通过表格发布。
答案 1 :(得分:0)
您可以修改服务器端代码以输出到webroot中的静态文件,并返回指向它的URL。然后,您可以将window.location.href
设置为网址。
答案 2 :(得分:0)
如果您自己填充日期,则可以使用this
用于请求类似Ajax的文件下载的jQuery插件
来自链接的例子:
$.download('/export.php','filename=mySpreadsheet&format=xls&content=' + spreadsheetData );