javascript - 如何从 onload 事件中获取准确的 HTTP 状态码

标签 javascript javascript-events

在我的服务器上,有些图片需要很长时间才能生成,但是一旦生成就会被缓存,因此后续请求很快。

当前,当图像仍在生成时,服务器正在返回 202 Accepted HTTP 状态结果。当图像已经生成可以立即发送时,它返回 200 结果。

为了避免网页长时间出现“损坏的图像”,我有:

  • 将事件处理程序附加到图像元素的 onload 事件,如果服务器返回 202 响应,它将隐藏图像并在其位置显示占位符图像。

  • 如果图像未加载且状态为 200,则启动周期性的 ajax rqeuest,它将定期检查图像现在是否可用,以及何时再次显示图像。

但是这个系统不能正常工作,因为我看不到如何在 onload 事件中从 202 个响应中分辨出 200 个响应,因此无法分辨何时需要设置 ajax 回调。

我如何确定触发 onload 事件的响应状态代码是什么?

顺便说一句,我考虑过将仍在生成图像时的响应代码更改为被认为是错误的响应代码,但是同样的问题也适用;如何区分“继续尝试加载此图像”和真正的服务器错误。

最佳答案

不是监听 onload 事件,而是使用 XHR 获取图像并监听 onreadystatechange 事件。

这是一个例子:http://jsfiddle.net/DerekL/rwewrrod/

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    console.log("State: ", this.readyState, "Status: ", this.status);
    if (this.readyState == 4 && this.status == 200) {
        var url = window.URL || window.webkitURL;
        document.querySelector("#img").src = url.createObjectURL(this.response);
    } else if (this.readyState == 4) {
        console.log(this.status);
    } else {
        //not ready yet
    }
}
xhr.open('GET', 'image.png');
xhr.responseType = 'blob';
xhr.send();

关于javascript - 如何从 onload 事件中获取准确的 HTTP 状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469474/

相关文章:

javascript - Node JS Passport Google OAuth 未进行身份验证

javascript - 在 JavaScript 中使用 HTML 文件类型

javascript - 在支持触摸的浏览器上创建和触发触摸事件?

javascript - 离开页面前询问用户确认的最佳方式

javascript - 检测文本框是否靠近浏览器窗口边缘

javascript - 是否有可能获得大整数实例的自然对数?

javascript - 如何在连接数据时从 v-for 绑定(bind)索引?

javascript - 哪些浏览器支持在 input[type ="file"] 元素上触发点击事件?

javascript - JavaScript的执行流程可以中断吗?

javascript - 如何检测是否在 JavaScript 中单击了某些内容? (不使用 jQuery)