2010-04-29 71 views
0

jquery $ .get()是否可以調用servlet並使用它同時下載文件或更新頁面而不重新加載頁面? (或更基本上,我可以下載一個文件,而無需重新加載頁面?)如何使用jquery從servlet動態下載和刪除文件

例如,我正在使用一個servlet返回一個文件來下載mimetype「application/octet-stream」,或者返回文本在「text/html」類型的頁面中更新。

我可以使用提交來編寫表單,但隨後它會重新加載頁面,所以我一直試圖使用$ .get()...但下載不起作用。

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    $("#handleFileOptions button").button(); 
    }); 

    function handleFilesSubmit(requestType) 
    { 
    $.get('FileServlet', {filename: $('#radioFileList input:radio:checked').button("widget").text(), requestType: requestType}, function(data){ ...?... }); 
    } 
</script> 

在HTML:

<div id = "handleFiles"> 
<div id ="radioFileList"> 
    <div id="radioFileList"> 
    <input value="file0.txt" type="radio" id="fileitem0><label for="fileitem0">file0.txt</label> 
    <input value="file1.txt" type="radio" id="fileitem1><label for="fileitem0">file1.txt</label> 
    </div> 
</div> 
<div id="handleFileOptions"> 
    <button id="handleFileOption0" onclick="handleFilesSubmit('Download')">Download</button> 
    <button id="handleFileOption1" onclick="handleFilesSubmit('Delete')">Delete</button> 
</div> 
</div> 

解決方案按照下面的建議,我直接更改提交函數加載的servlet爲:

function handleFilesSubmit(requestType) 
{ 
    if(requestType == "Download"){ 
    window.location.replace("FileServlet?filename="+$('#radioFileList input:radio:checked').button("widget").text()+"&requestType="+requestType); 
    } 
    else {  
    $.get('FileServlet', {filename: $('#radioFileList input:radio:checked').button("widget").text(), requestType: requestType}, function(data){ ...?... }); 
    } 
} 

回答

3

其實,有你試圖讓它加載文件下載?大多數瀏覽器會檢測到它是一個文件,並且不會離開頁面。他們只會顯示下載對話框。

+1

+1重要提示。這是處理這個問題的正確方法。 – 2010-04-29 20:37:01

+0

謝謝 - 我添加了一個調用window.location.replace()的下載函數,並且這個函數就像一個魅力一樣。 – 2010-04-29 21:43:05

0

做一個小iframe提交。不是最漂亮的解決方案,但它可以解決您正在處理的問題。

相關問題