带文件返回的Ajax帖子

时间:2016-08-05 12:46:20

标签: java ajax spring file post

有没有办法返回动态服务器端生成的文件,该文件是从ajax post结构中获取的?

编写一个小型web mvc项目,该项目生成一个数据列表(数据是从复杂的聚合查询生成的,不能从id或任何地方调用),然后到达我想要导出一些选定的部分部分到文件并下载。

它是如何工作的: 1.在页面上,我选择一些包含关键数据的字段(使用JQuery DataTable) 2.将其发送到控制器(准确地说是Spring) 3.生成一个字节流并将其作为HTTPResponse返回,其中包含" Content-disposition"," attachment"报头中。

事实是,我选择行并使用JQuery-> Ajax形成所需的数据,因此Controller-> Post的结果保留在javascript部分内,而不是给我一个"另存为.. "

我已经考虑过一个临时目录或其他东西,但是为最后一个保存选项。

1 个答案:

答案 0 :(得分:1)

不幸的是,您无法通过ajax获取文件,但您可以通过动态生成表单并提交它来实现。根据我们对生成表单的评论讨论并提交它,你可以做这样的事情。

function autoSubmitForm(method, url, post_data) {
    var element = document.getElementById("virtual_form");
    if(element != null )
    {
        element.parentNode.removeChild(element);
    }
    var form = document.createElement("form");
    form.setAttribute("id", "virtual_form");
    form.setAttribute("style", "display:none;");
    form.method = method;
    form.action = url;   
    for(i in post_data)
    {
         var element=document.createElement("input");
         element.value=post_data[i];
         element.name=i;
         form.appendChild(element); 
    }
    document.body.appendChild(form);
    form.submit();

}

autoSubmitForm('POST','your_url.php',{id:"xyz",other_input:"input value"});

这里{id:"xyz",other_input:"input value"}是发布数据的对象,您可以动态地定义它对字段名称和字段值。将其传递给函数。