跨浏览器获取响应验证
Cross browser fetch response validation
如何检查来自 JavaScript 提取的响应是否有效(状态 200),以跨浏览器工作的方式?
我找到的唯一解决方案是将响应作为 ArrayBuffer 读取并逐字节手动检查内容以查看它是否是有效文件。不太实用
在我的例子中,获取是在服务工作者中进行的,所以我不知道正在获取哪种资源(html 文档、图像、二进制文件等),我只想获取不同的操作取决于成功与否。
fetch('http://example.com/some_resource')
.then(function(response)
{
if (response.ok)
{
// Works for most browsers, but not Chrome and Firefox on Android
}
response.arrayBuffer().thenCheckEveryByteOfTheFile; // Do I really have to do this?
});
更新:
MDN 文档是错误的。 Response.ok 是为 Chrome 和 Android 上的 Firefox 定义的。
不幸的是,根据 MDN,fetch()
对象的属性不(正式)完全兼容,尤其是在 Android 上 Chrome/Firefox/Opera 的移动端,因为今天的。
这不是您的选择,因为您正在使用 Service Worker,常规 Ajax 支持已被删除。 XHR 不会在那里定义,你只能使用 fetch()
API.
否则,您可能会选择 XMLHttpRequest,它保留了完整的官方跨浏览器兼容性。
let xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/some_resource');
xhr.send();
//When response is received
xhr.onload = function() {
if (xhr.status == 200) { // xhr.status is compatible with Android
console.log(xhr.response);
//OK!
} else {
console.log(xhr.response);
//OOPS, not OK!
}
};
无论如何,如果您尝试编写此脚本:
window.onload = function() {
fetch('https://whateverfreeapiyoucanthink.of')
.then(function(response)
{
alert(response.status);
});
}
然后从 Android 设备打开页面,这对我来说都适用
Chrome 88 和 Firefox 86 使用 Android 8.0.0,虽然它不受官方支持。如果没有,这值得注意,因为它会证明 MDN 是错误的。
如何检查来自 JavaScript 提取的响应是否有效(状态 200),以跨浏览器工作的方式?
我找到的唯一解决方案是将响应作为 ArrayBuffer 读取并逐字节手动检查内容以查看它是否是有效文件。不太实用
在我的例子中,获取是在服务工作者中进行的,所以我不知道正在获取哪种资源(html 文档、图像、二进制文件等),我只想获取不同的操作取决于成功与否。
fetch('http://example.com/some_resource')
.then(function(response)
{
if (response.ok)
{
// Works for most browsers, but not Chrome and Firefox on Android
}
response.arrayBuffer().thenCheckEveryByteOfTheFile; // Do I really have to do this?
});
更新: MDN 文档是错误的。 Response.ok 是为 Chrome 和 Android 上的 Firefox 定义的。
不幸的是,根据 MDN,fetch()
对象的属性不(正式)完全兼容,尤其是在 Android 上 Chrome/Firefox/Opera 的移动端,因为今天的。
这不是您的选择,因为您正在使用 Service Worker,常规 Ajax 支持已被删除。 XHR 不会在那里定义,你只能使用 fetch()
API.
否则,您可能会选择 XMLHttpRequest,它保留了完整的官方跨浏览器兼容性。
let xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/some_resource');
xhr.send();
//When response is received
xhr.onload = function() {
if (xhr.status == 200) { // xhr.status is compatible with Android
console.log(xhr.response);
//OK!
} else {
console.log(xhr.response);
//OOPS, not OK!
}
};
无论如何,如果您尝试编写此脚本:
window.onload = function() {
fetch('https://whateverfreeapiyoucanthink.of')
.then(function(response)
{
alert(response.status);
});
}
然后从 Android 设备打开页面,这对我来说都适用 Chrome 88 和 Firefox 86 使用 Android 8.0.0,虽然它不受官方支持。如果没有,这值得注意,因为它会证明 MDN 是错误的。