【问题标题】:AJAX response need to be converted to blobAJAX 响应需要转换为 blob
【发布时间】:2018-10-15 18:10:33
【问题描述】:

我已经编写了 ajax 代码来在 url 中设置请求标头并将其转换为 blob 并传递给函数 showFile (blob); 然后处理 blob 并以 pdf 格式下载 代码中获得的blob 值是undefined。有人可以帮我解决这个问题吗?

   var resolved = function (url) {
        var showFile = function (blob) {
            var newBlob = new Blob([blob], {type:"application/pdf"})                   
            const data = window.URL.createObjectURL(newBlob);
            var link = document.createElement('a');
            link.href = data;
            link.download = options.name;
            link.click();
            setTimeout(function () {
                window.URL.revokeObjectURL(data);
            }, 100)
        }
        var jwtToken = localStorage.getItem("jwtToken");
        var headerObj = {"Authorization": "Bearer " + jwtToken}

        var xhr = new XMLHttpRequest();
        $.ajax({
            dataType:'blob',
            type:'GET',
            url:url
        }).done(function(blob){
            showFile(blob); 
        });
    };

【问题讨论】:

  • 你用的是什么版本的jQuery?
  • JQuery 3.1.1 版本

标签: javascript jquery ajax blob


【解决方案1】:

如果您需要来自 jQuery ajax 的 blob 响应,请将 xhrFieldsresponseType 字段设置为 blob。 由于响应将是一个 blob,因此您不必创建一个。
另外,您是否忘记将您的身份验证标头添加到请求中?

   var resolved = function (url) {
        var showFile = function (blob) {                 
            const data = window.URL.createObjectURL(blob);
            var link = document.createElement('a');
            link.href = data;
            link.download = options.name;
            link.click();
            setTimeout(function () {
                window.URL.revokeObjectURL(data);
            }, 100)
        }
        var jwtToken = localStorage.getItem("jwtToken");
        var headerObj = {"Authorization": "Bearer " + jwtToken}

        var xhr = new XMLHttpRequest();
        $.ajax({
            xhrFields: {
               responseType: 'blob' 
            }
            headers: headerObj, 
            type:'GET',
            url:url
        }).done(function(blob){
            showFile(blob); 
        });
    };

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多