2016-08-05 65 views
2

有没有办法返回一个动态的服务器端生成的文件,它是从ajax文章结构中获取的?带文件的Ajax文章返回

编写一个小型网络mvc项目,它生成一个数据列表(数据是从一个复杂的聚集查询生成的,不能从id或任何其他名称调用),然后到我想要导出的部分选定的部分添加到文件并下载。

它是如何工作: 1.在我选择与关键数据(使用JQuery数据表)的某些字段的页面 2.它发送到控制器(春要准确) 3.生成的字节流,并将其返回作为具有“Content-disposition”,“attachment”头的HTTPResponse。

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

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

+0

不幸的是...... –

+0

但我可以以某种方式做一个非Ajax的帖子,应该打开一个新的标签\窗口,并收到一个正常的服务器回复,它将直接接收文件? –

+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"}是POST数据的对象,你可以把它定义动态配对字段名称和字段的值。传递它的功能。

+0

谢谢。我现在试试 –

+0

,同时我从我的代码编辑。 :)所以请检查我的编辑 –

+0

你忽略了函数中的方法和url参数... –