无法在Ajax Call of Jquery上下载xls

时间:2016-07-26 16:11:51

标签: javascript jquery ajax excel

我想下载在服务器上生成的.xls文件,当时.xls生成我想要锁定UI,但是在Ajax调用文件上没有下载 而数据来自浏览器,但它没有在浏览器上显示“另存为”对话框

我的问题陈述是,

1)我想在 Ajax调用下载服务器上生成的.Xls 文件    Jquery的。

2)当生成.xls文件时,我想锁定UI。

Jquery Ajax函数,.ajaxform 无法正常工作下载文件。

attr()。submit()函数成功下载文件,但无法通知文件下载完成。

注意:1)从浏览器启用“另存为”选项。

 2) .Xls file is getting generated from server side successfully
  

请提供可用的替代选项

3 个答案:

答案 0 :(得分:0)

通过ajax做不可能。你可以在成功回调中做点什么。

window.location="download.xls/or/what/ever/?para1=value1...."

并在服务器上设置适当的下载标头。

答案 1 :(得分:0)

不幸的是,我们无法从AJAX请求下载文件

但您可以通过belo代码锁定屏幕

$("#id_of_form input[type='submit']").click(function(e){

// your code for lock screen here

return true;
});

答案 2 :(得分:0)

我认为你想跟踪下载状态(),你可以轻松锁定你的用户界面直到下载完成,我们可以用2种方式做到这一点,遗憾的是通过使用ajax调用我们无法启用下载文件,但是如果我们使用一些额外的html元素,我们可以通过jquery-ajax本身启用下载,你可以锁定你的UI,直到jquery完成下载。

方法1

  1. 使用您的代码生成xl(文件)并将该文件保存到任何临时位置

  2. 在ajax中调用此方法,并在响应中发送您之前保存的文件的名称

  3. 在jquery中创建一个临时<a>标记并启用click事件,它将下载该文件。

  4. 完成下载后,您可以解锁您的用户界面

    $.ajax({
    type: "POST",
    url: AQ.AMT.Url + "/Home/StoreImage",
    //async: false,
    data: JSON.stringify({ request: request }),
    contentType: "application/json; charset=utf-8",
    dataType: "json", 
    success: function (Data) {
    
        var _tempPPT = AQ.AMT.Url + "/Download/Temp/" + Data.Result + ".pptx";
        // Trick for making downloadable link
        a = document.createElement('a');
        a.href = _tempPPT;// window.URL.createObjectURL(xhttp.response);
        a.id = "idanchrPPT";
        // Give filename you wish to download
        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth() + 1; //January is 0!
        var yyyy = today.getFullYear();
        if (dd < 10) {
            dd = '0' + dd
        }
        if (mm < 10) {
            mm = '0' + mm
        }
        today = dd + '/' + mm + '/' + yyyy;
        if (flipName == "")
            a.download = "" + name + "-" + today + ".pptx";
        else
        a.download = "" + name + "-" + flipName + "-" + today + ".pptx";
        a.style.display = 'none';
        document.body.appendChild(a);
        a.click();
        $("#idanchrPPT").remove();
    
    
        //deleting the file
        var deleteFiles = {};
        deleteFiles.FilePath = Data.Result;
        setTimeout(function () {
            $.ajax({
                type: "Post",
                data: JSON.stringify({ deleteFiles: deleteFiles }),
                url: AQ.AMT.Url + "/Home/DeleteExportedPPt",
                async: true,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (result) {
                },
                error: function (result) {
                }
            });
        }, 1000);
      },
      error: function (e) {
      }
    });
    
  5. 方法2

    使用XMLHttpRequest而不是Jquery $ ajax

    xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        var a;
        if (xhttp.readyState === 4 && xhttp.status === 200) {
    
            var _tempPPT = AQ.AMT.Url + "/Download/Template/ExportPPtTrend1.pptx";
    
            // Trick for making downloadable link
            a = document.createElement('a');
            a.href = _tempPPT;// window.URL.createObjectURL(xhttp.response);
            a.id = "idanchrPPT";
            var k = xhttp.responseText;
            // Give filename you wish to download
            a.download = "test-file.pptx";
            a.style.display = 'none';
            document.body.appendChild(a);
    
            a.click();
            $("#idanchrPPT").remove();
    
            //alert("ok");
            $('.divLoader,.divBackgroundCo').hide();
        }
    };
    // Post data to URL which handles post request
    xhttp.open("POST", urlToHandler);
    //Send the proper header information along with the request
    xhttp.responseType = 'text';
    //xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    
    
    xhttp.send();