Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AJAX下载CSV_C#_Javascript_Asp.net_Jquery_Csv - Fatal编程技术网

C# 使用AJAX下载CSV

C# 使用AJAX下载CSV,c#,javascript,asp.net,jquery,csv,C#,Javascript,Asp.net,Jquery,Csv,我正在使用C#和JavaScript。我的目标是发送一个ajax请求,从而下载一个CSV文件。CSV将在服务器端的ashx页面中生成。目前,应用程序可以下载CSV,但是使用表单而不是AJAX请求,但是后端代码是相同的 以下是我收到的失败的ajax请求: $.ajax({ url: "myDir/x.ashx/exportAllData", type: 'POST', data: { id:8 }, success: function(aj

我正在使用C#和JavaScript。我的目标是发送一个ajax请求,从而下载一个CSV文件。CSV将在服务器端的ashx页面中生成。目前,应用程序可以下载CSV,但是使用表单而不是AJAX请求,但是后端代码是相同的

以下是我收到的失败的ajax请求:

$.ajax({
    url: "myDir/x.ashx/exportAllData",
    type: 'POST',
    data: { 
        id:8
    },
    success: function(ajaxResult){
    console.log(ajaxResult);
    }
});
以下是有效的表单方法:

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

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

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

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

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

链接中的示例:

$.download('/export.php','filename=mySpreadsheet&format=xls&content=' + spreadsheetData );

正确复制或获取。。。实际上,它与请求本身无关,而是与处理响应的“thing”有关。Javascript无法在文件系统中存储数据。这是一个合理的解释。出于安全原因,JavaScript无法与磁盘交互,因为这是一个漏洞。这是一个好主意。文件甚至不需要在根目录中,只要您有一个处理程序从它所在的位置获取它。