2016-08-05 35 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參數... –