Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Jquery 对返回excel文件流的控制器的Ajax调用导致格式不正确的错误_Jquery_Json_Ajax_Asp.net Mvc 5 - Fatal编程技术网

Jquery 对返回excel文件流的控制器的Ajax调用导致格式不正确的错误

Jquery 对返回excel文件流的控制器的Ajax调用导致格式不正确的错误,jquery,json,ajax,asp.net-mvc-5,Jquery,Json,Ajax,Asp.net Mvc 5,我们当前的网站有几个html数据表,可以在客户端对其进行排序,然后将其导出到excel文件。我正在尝试创建通用方法,该方法可以处理传递到控制器中的任何表数据,并仅在内存中创建文件。我只是使用一个简单的按钮单击事件来启动一个ajax调用,将JSON对象传递给控制器,如下所示: var convertedTable = JSON.stringify({ myTableArray: myTableArray }); $.ajax({ type: 'POST', url: '/Ta

我们当前的网站有几个html数据表,可以在客户端对其进行排序,然后将其导出到excel文件。我正在尝试创建通用方法,该方法可以处理传递到控制器中的任何表数据,并仅在内存中创建文件。我只是使用一个简单的按钮单击事件来启动一个ajax调用,将JSON对象传递给控制器,如下所示:

  var convertedTable = JSON.stringify({ myTableArray: myTableArray });

$.ajax({
    type: 'POST',
    url: '/TableToExcel',
    data: JSON.stringify({ myTableArray: myTableArray }),
    contentType: 'application/json; charset=utf-8',
     dataType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    success: function (returnValue) {

        window.location = '/Reports/Download?file=' + returnValue;

    }
});
控制器现在很简单,当浏览器直接调用时,它可以很好地返回文件

    public FileResult Index(List<string[][]> tableData)
    {
        ExcelPackage pck = new ExcelPackage();
        var ws = pck.Workbook.Worksheets.Add("Sample2");

        ws.Cells["A1"].Value = "Sample 2";
        ws.Cells["A1"].Style.Font.Bold = true;

        var stream = new MemoryStream(pck.GetAsByteArray());

        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
公共文件结果索引(列表tableData)
{
ExcelPackage pck=新的ExcelPackage();
var ws=pck.Workbook.Worksheets.Add(“示例2”);
ws.Cells[“A1”].Value=“样本2”;
ws.Cells[“A1”].Style.Font.Bold=true;
var stream=newmemorystream(pck.GetAsByteArray());
返回文件(流,“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”);
我在FF调试器中不断遇到格式不正确的错误。这是正确的处理方法吗

我还认为表单是更好的方式,但不确定这是否有效,因为我需要在提交表单之前首先处理表数据,并且需要使用POST来处理JSON对象


任何关于处理此问题的最佳方法的建议都将不胜感激。

对于任何正在搜索答案的人。 是的,你可以而不是这样做。
我实际上是想把文件本身传回去。根据我所读到的和确定的,Ajax只接受字符串。我返回的所有示例都返回了保存的文件位置,而不是文件本身。

任何搜索答案的人。 是的,你可以而不是这样做。 我实际上是想把文件本身传回去。根据我读到的和确定的,Ajax只接受字符串。我回来的所有示例都返回了保存的文件位置,而不是文件本身