gpt4 book ai didi

javascript - jQuery:在完整函数内访问二进制 AJAX 响应或在回调函数外访问 XHR 对象?

转载 作者:行者123 更新时间:2023-12-04 14:55:24 25 4
gpt4 key购买 nike

关于使用 jQuery 处理二进制 AJAX 响应有很多问题,例如 this , this , 和 this .没有帮助。

目标:(1) 动态确定响应是否包含二进制数据,并以不同于文本的方式处理它; (2) 解析响应头; (3) 从一个函数中完成这两项操作。

理想情况下,这可以通过 complete 函数完成,但 complete 函数无法访问 XHR 对象。 jqXHR 应该是 XHR 对象的超集,但是 XHR.response 是空白的。

$.ajax(settings) 的返回值包含二进制数据,但 XHR 对象不再可用——因此似乎无法分析响应 header 。

是否可以在 complete 回调内访问二进制 AJAX 响应或在回调函数外访问 XHR 对象?

// Assume @data contains body and URL values.

let settings = {
url: data.url,
method: "post",
timeout: 0,
contentType: false,
processData: false,
data: data.body,
xhr: function() {
// Create XMLHttpRequest object.
let xhr = new XMLHttpRequest();

// Handle event for when response headers arrive.
xhr.onreadystatechange = function() {
if (xhr.readyState == 2) {
if (xhr.status == 200) {
xhr.responseType = 'blob';
} else {
xhr.responseType = 'text';
}
}
};

return xhr;
},
complete: function(xhr, status, error) {
// Can access response headers but not binary response here.
}
};

let response = await $.ajax(settings);
// @response is blob but cannot access XHR object here.

最佳答案

我假设您使用的是 jQuery v1.5+。 complete 回调已弃用,取而代之的是 always,它包括响应主体。我可以在一个函数中获取它以及响应 header ,执行如下操作:

$.ajax({
url: 'https://static.wikia.nocookie.net/5dabc4c4-7cdb-438d-ba57-6b09afffcbb4',
method: 'get',
})
.always((responseBody, responseStatus, xhr) => {
// You don't need this check when using .done()
if (responseStatus === 'success') {
if (xhr.getResponseHeader('content-type').startsWith('image')) {
processImage(responseBody)
}
}
})

这也适用于您的示例。让我知道这是否有效。

关于javascript - jQuery:在完整函数内访问二进制 AJAX 响应或在回调函数外访问 XHR 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68127653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com