2014-06-18 104 views
-1

我想要一個按鈕,用戶可以單擊下載文件,但文件可能不存在,因爲它是其他文件的壓縮文件,必須生成。我正在使用AJAX進行檢查,但是一旦我收到一個正確的URL,我不確定如何讓用戶下載它。讓用戶通過JavaScript下載文件?

window.open(link, '_blank');嘗試打開窗口下載文件,但大多數瀏覽器都會阻止此操作並將其視爲彈出窗口。讓用戶像這樣下載文件的最佳做法是什麼?謝謝。

這裏是JS的功能,我使用供參考:

function getDownloadedFiles() { 
    var INTERVAL_TIME = 3000, 
     $projectView = $('#project-view'), 
     id   = $projectView.data("project-id"); 
    $.ajax({ 
     type: "GET", 
     url: AJAX_URL + id, 
     success: function(data) { 
      if (data.success) { 
       var link = data.profiler.link; 
       window.open(link, '_blank'); 
      } else { 
       setTimeout(getDownloadedFiles, INTERVAL_TIME); 
      } 
     } 
    }); 
} 
+0

擺脫Window.open的。如果瀏覽器無法自動處理該文件,它將自行打開SaveAs對話框。除非用戶已經設置了偏好設置,在這種情況下,只需將文件下載到他們的驅動器,並在完成後通知他們。 – durbnpoisn

+2

[下載使用Javascript/jQuery的文件]的可能的重複(http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery) – admdrew

+0

我看着這個問題,解決方案不適合我。 –

回答

-2

也許你可以使用一個隱藏的iframe對這一問題。試試這個:

var downloadURL = function downloadURL(url) { 
    var hiddenIFrameID = 'hiddenDownloader', 
    iframe = document.getElementById(hiddenIFrameID); 
    if (iframe === null) { 
     iframe = document.createElement('iframe'); 
     iframe.id = hiddenIFrameID; 
     iframe.style.display = 'none'; 
     document.body.appendChild(iframe); 
    } 
    iframe.src = url; 
}; 

Download File Using Javascript/jQuery

+0

這不適合我。 –

+0

也許你可以展示更多關於你如何使用提到的線程與你一起工作的代碼。 –

+1

我發現我沒有調用正確的URL,所以代碼確實起作用。我會刪除這個問題,因爲它是重複的。 –

-1

到底只是一個無恥的裂口,正確的解決辦法是Download File Using Javascript/jQuery,我用錯了網址。

我當時設置的鏈接是data.profiler.link,當它真的是data.data.link和困惑我自己。

這是我的最終代碼:

function getDownloadedFiles() { 
    var INTERVAL_TIME = 3000, 
     $projectView = $('#project-view'), 
     id   = $projectView.data("project-id"); 
    $.ajax({ 
     type: "GET", 
     url: AJAX_URL + id, 
     success: function(data) { 
      if (data.success) { 
       var link = data.data.link, 
        hiddenIFrameID = 'hiddenDownloader', 
        iframe = document.getElementById(hiddenIFrameID); 
       if (iframe === null) { 
        iframe = document.createElement('iframe'); 
        iframe.id = hiddenIFrameID; 
        iframe.style.display = 'none'; 
        document.body.appendChild(iframe); 
       } 
       iframe.src = link; 
      } else { 
       setTimeout(getDownloadedFiles, INTERVAL_TIME); 
      } 
     } 
    }); 
}