Ajax請求ashx一般處理程序實現文件下載


 

    具體功能為,在文件數據列表中選擇一行,點擊表格上方的下載按鈕,下載文件。由於表格中不包含文件路徑,只能取到在數據庫表中的ID,所以具體實現就是這樣:首先點擊一行,獲取點擊的一行數據的ID,用Ajax傳值到Ashx服務文件,在Ashx中根據ID取到文件路徑,轉換為服務器虛擬路徑后返回到Web頁面。在Web頁面中用Ajax進行下載。

    一開始嘗試過直接在Ashx服務處理中response.writeFile(),結果不能下載,原因可能是因為Ajax請求,而返回的時候直接返回到了Ajax的回調函數中。於是只好取到文件的路徑后直接返回回調函數,然后在回調函數路面下載。

    在網上找到好多種下載方式,用jQuery來處理文件路徑最多的建議就是window.href=url,可能很多需求並不是下載文件,而是重定向吧。如果下載文件這樣寫也是可以的,只不過用戶體驗不好,點擊下載后就跳轉頁面了,下載完還要后退或者怎么樣。所以我就沒有用這種方式。

    下面還是講講我用的方法吧,比較巧妙。就是先在頁面中添加一個隱藏的a標簽,讓其隱藏,在獲取到文件路徑的時候賦值給a的href,然后觸發a標簽的click事件就行了。

<a id="dp" href="" style="display: none;"><span id="fp"></span></a>

    這里a標簽如果直接觸發的話沒有用,所以在其中加了一個span標簽,觸發的span標簽的click事件就可以了。

 function Download() {
            //在選擇某行的時候給rowid賦值,這里取值即可
            var id = $("#rowid").val();

            $.ajax({
                type: "POST",
                url: "Download.ashx",
                dataType: "json",
                data: {
                    action: "DownLoad",
                    id: id
                },
                success: function (data) {
                    if (data != null || data != "") {
                        //獲取返回的文件路徑
                        var path = data[0]["path"].toString();
                        //給a標簽賦值
                        $("#dp").attr("href", path);
                        //這里的fp是a標簽中的span標簽的ID
                        $("#fp").click();
                    }
                    else {
                        alert("文件不存在");
                    }
                }
            });
        }

    這的確是一個比較實用的小訣竅,這下再也不用擔心Ajax文件下載的問題啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM