尝试使用jQuery.ajax下载文件时出错

时间:2018-10-06 15:14:11

标签: jquery ajax internet-explorer download owin

我有一个使用OWIN进行身份验证的WCF服务,因此我需要在每个请求中发送一个Authorization: Bearer <access_key>头。因此,我无法使用传统的隐藏表单+ iframe下载文件,而必须使用AJAX调用。基于this answer,我编写了以下代码:

var header = "Bearer reallylongaccesskey";
var serviceUrl = "http://mywcfserviceurl";
var downloadToken = Date.now();

$.ajax(url + "&downloadToken=" + downloadToken, {
    beforeSend: function (xhr, settings) {
        showWaitingMessage(null, "Exporting...");
        if (this.url && this.url.toLowerCase().indexOf(serviceUrl) >= 0) {
          xhr.setRequestHeader('Authorization', header);
        }
        return true;
    },
    cache: false,
    complete: function(xhr, textStatus) {
        closeWaitingMessage();
        document.cookie = "downloadToken=''"; //the server returns the downloadToken as a cookie which is cleared here.
        //this was part of the previous form+hidden iframe implementation
    },
    data: { paramStr: jsonStr },
    dataType: "text",
    error: ajaxException,
    traditional: true,
    type: "POST",
    success: function(data, textStatus, xhr) {
        var contentType = xhr.getResponseHeader("content-type");
        var blob = new Blob([data], { type: contentType });
        var contentDisposition = xhr.getResponseHeader("Content-Disposition");
        var fileName = contentDisposition.substring(contentDisposition.indexOf("=") + 1);
        window.navigator.msSaveOrOpenBlob(blob, fileName);
    },
    timeout: 300000,
    xhrFields: {
        responseType: "blob"
    }
});

我可以跟踪到服务器的请求,生成并返回文件,并且在IE F12开发人员工具栏中,可以看到响应状态为200 OK(带有正确的响应头),但是某种程度上只有error回调使用xhr.status = 0而不是success回调来调用。

这只能在此阶段(公司Intranet)与IE11一起使用,因此不支持HTMLAnchorElement.download

我目前仅限于jQuery 1.7.1。

我在做什么错了?

0 个答案:

没有答案