2016-08-24 26 views
0

我有一個文件從servlet來dowmnload,我需要當用戶點擊下載按鈕,而不被頁面refreshed.Hiw我能實現這個下載。 這是我的jsp代碼。我允許用戶通過在搜索框中輸入憑據來下載文件。因此我的文件搜索邏輯位於servlet中。下載文件/阿賈克斯

<form action="Download_Servlet" class="download" method="post">  
Search:<input type="text" name="dropdown" id="datedropdown"> 
<input type="submit" id="downloadRecords" value="Download"> 

這裏是我的servlet代碼

response.setContentType("application/octet-stream"); 
response.setHeader("Content-Disposition","attachment;filename=abc.csv"); 
ServletOutputStream out = res.getOutputStream(); 
for (Order traverse : orderMap.values()) 
    { 
     out.write(traverse.toString().getBytes()); 
     out.write("\n".getBytes()); 
     out.flush(); 
    } 

之所以使用for循環寫幾百記錄成文件,然後沖洗it..Nbow值得關注的是,當用戶點擊下載按鈕,頁面是試圖要重定向,但沒有servlet中的代碼重定向響應,所以爲什麼會發生這種情況..我想要的是當下載按鈕被點擊時,文件只應該被下載而沒有頁面被重定向。

+0

好,並在你的Ajax代碼? – drgPP

+0

我沒有使用AJAX這個,但是當我搜索網上的人說,Ajax是該解決方案的最好的一個,但不能得到確切的solution..So問你的人,我怎麼能做到這一點。 –

+0

當servlet返回一個Content-Disposition:attachment響應時,頁面刷新/重定向是** not **缺省行爲。它應該徹底運作。你的問題是其他地方引起的遺憾的是,目前所提供的信息並不可見。要初始化根本原因,請創建[mcve]。至少絕對不需要過於複雜的基於Ajax的解決方案。 – BalusC

回答

-1

這裏是一個函數:

function ajax_download(url, data) { 
    var $iframe, 
     iframe_doc, 
     iframe_html, 
     input_name; 

    if (($iframe = $('#download_iframe')).length === 0) { 
     $iframe = $("<iframe id='download_iframe'" + 
       " style='display: none' src='about:blank'></iframe>" 
       ).appendTo("body"); 
    } 

    iframe_doc = $iframe[0].contentWindow || $iframe[0].contentDocument; 

    if (iframe_doc.document) { 
     iframe_doc = iframe_doc.document; 
    } 

    iframe_html = "<html><head></head><body><form method='POST' action='" + 
        url +"'>" + 
        "<input type=hidden name='" + input_name + "' value='" + 
        JSON.stringify(data) +"'/></form>" + 
        "</body></html>"; 

    iframe_doc.open(); 
    iframe_doc.write(iframe_html); 
    $(iframe_doc).find('form').submit(); 
} 

用法:

$(document).on('click', '#download_button_id', function(){ 
    ajax_download('http://www.mridulahuja.com/uploads/1/3/8/6/13860206/handy_notes_v2.0.rar'); 
}); 
+0

我可以使用ajax調用將搜索框的值發送給servlet,然後作爲回報,我只會提醒該文件已下載。您覺得怎麼樣?但是作爲回報,爲了能夠運行成功函數,我們需要發送一些servlet到ajax對或錯的響應。如果正確的話,那麼成功函數的語法是什麼,以便從servlet中獲取什麼...... –