jquery接收 blob 数据

默认jQuery的ajax不支持dataType设置为blob,可通过原生ajax或修改xhrFields解决。方法1采用原生ajax,方法2是修改jQuery的ajax配置,设定xhrFields的responseType为blob。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

默认 jq 的 ajax 对象中的 dataType 无法设置返回资源为 blob

dataType只能设置以下选项,不能设置blob,所以我们需要自己进行改动
在这里插入图片描述

解决方法1:使用原生的ajax

<div onclick="download1()">下载</div>
<script>
    function downloadFile1(content, filename) {
        var a = document.createElement('a')
        var blob = new Blob([content])
        var url = window.URL.createObjectURL(blob)
        a.href = url
        a.download = filename
        a.click()
        window.URL.revokeObjectURL(url)
    }

    function download1() {
        var url = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=20550366,3650143321&fm=26&gp=0.jpg' // demo图片
        ajax(url, function(xhr) {
            var filename = 'xxx.' + url.replace(/(.*\.)/, '') // 自定义文件名+后缀
            downloadFile1(xhr.response, filename)
        }, {
            responseType: 'blob'
        })
    }

    function ajax(url, callback, options) {
        window.URL = window.URL || window.webkitURL
        var xhr = new XMLHttpRequest()
        xhr.open('get', url, true)
        if (options.responseType) {
            xhr.responseType = options.responseType
        }
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                callback(xhr)
            }
        }
        xhr.send()
    }
</script>

解决方案2:修改 xhrFields

修改 jq 的 ajax 方法中 xhrFields 属性,定义响应类型为 blob

xhrFields: {
	responseType: 'blob'
},
    function download(){
        var url ="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=20550366,3650143321&fm=26&gp=0.jpg";
        var f1 = $.ajax({
            url: url,
            type: 'GET',
            xhrFields: {
				responseType: 'blob'
			},
        });
        $.when(f1).then(function (content) {
            console.log("jinru")
            var filename = 'xxx.' + url.replace(/(.*\.)/, '') // 自定义文件名+后缀
            var a = document.createElement('a')
            var blob = new Blob([content])
            var url = window.URL.createObjectURL(blob)
            a.href = url
            a.download = filename
            a.click()
            window.URL.revokeObjectURL(url)
        }, function () {
            //失败回调,任意一个请求失败时返回
            console.log("失败");
            console.log('error');
        })
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值