【发布时间】:2021-09-08 15:37:18
【问题描述】:
关于使用 jQuery 处理二进制 AJAX 响应有很多问题,例如 this、this 和 this。没有任何帮助。
目标:(1)动态判断响应是否包含二进制数据,并以不同于文本的方式处理; (2) 分析响应头;和 (3) 从一个函数中完成。
理想情况下,这可以通过 complete 函数完成,但 complete 函数无权访问 XHR 对象。 jqXHR 应该是 XHR 对象的超集,但 XHR.response 是空白的。
$.ajax(settings) 的返回值包含二进制数据,但 XHR 对象不再可用——因此似乎无法分析响应标头。
是否可以在 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.
【问题讨论】:
标签: javascript jquery ajax