0

我正在使用 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();
}
4

3 回答 3

1

简短的回答是你不能。浏览器无法通过 ajax 下载文件。它必须通过表格邮寄完成。

于 2013-10-23T13:58:34.280 回答
0

您可以修改服务器端代码以输出到 webroot 中的静态文件并返回指向它的 URL。然后,您可以设置window.location.href为 URL。

于 2013-10-23T14:02:17.883 回答
0

如果您自己填充日期,您可以使用

用于请求类 Ajax 文件下载的 jQuery 插件

来自链接的示例:

$.download('/export.php','filename=mySpreadsheet&format=xls&content=' + spreadsheetData );
于 2013-10-23T14:04:59.750 回答