javascript - 在 HTML 画布上加载图像时处理 Image.onerror 中的 404
问题描述
我编写了一些 Javascript 代码来加载图像(由最终用户上传),如下所示:
var img = new Image;
var ctx = _this.canvas.getContext('2d');
img.onload = function(){
ctx.drawImage(img, 0, 0, img.width, img.height);
//do other stuff..
}
img.onerror = function(event){
bootbox.alert("Error loading the image!");
}
img.src = Settings.URL + '/images/loadimage/?imageKey=' + imageKey;
imageKey
如果对应的图片不存在,服务器返回404响应,其他错误场景也返回500错误。
此代码工作正常,但我想做的是在以下两种不同情况下显示两条不同的消息:
- 当我收到 404 响应时。
- 当错误 500 响应时。
我无法弄清楚的是 - 如何在img.onerror
.
解决方案
onerror方法不提供有关所发生错误类型的任何信息。参考这篇 Stackoverflow 帖子,“image.onerror
处理程序将收到一个事件参数,其中不包含有关错误原因的任何信息”。
在这篇博文中,您将找到一些提示如何处理可能不存在的图像的加载。在您的情况下,一个快速的解决方案是使用 XMLHttpRequest 加载图像,您可以在其中访问网络状态:
let imageReq = new XMLHttpRequest();
imageReq.open("GET", Settings.URL + '/images/loadimage/?imageKey=' + imageKey, true);
imageReq.responseType = "blob";
imageReq.onload = function(imageEvent) {
// the variable below will contain your image as BLOB data
var blob = imageReq.response;
let img = new Image;
let ctx = _this.canvas.getContext('2d');
img.onload = function() {
ctx.drawImage(img, 0, 0, img.width, img.height);
//do other stuff..
}
let urlCreator = window.URL || window.webkitURL;
let imageUrl = urlCreator.createObjectURL(blob);
img.src = imageUrl;
};
imageReq.onreadystatechange = function (imageEvent) {
if (imageReq.readyState === 4) {
if (imageReq.status === 200) {
// image has been loaded correctly
} else if (imageReq.status === 404) {
console.log("Image not found");
} else if (imageReq.status === 500) {
console.error("An error occurred:", imageReq.statusText);
}
}
};
imageReq.send(null);
推荐阅读
- flutter - 如何在 Flutter 中圆滑滑块的角
- ruby-on-rails - 将参数添加到选项卡以在 if 语句中使用
- arduino - 将字符串转换为 Char* 并使用 SHA-256 对其进行哈希处理
- codenameone - 在 Codenameone 中控制宽度渲染动画
- java - EditText 数字分组仅显示 4 个字符
- javascript - 我如何将 2 个提示答案转换为 1 个结果以进行连接
- ios - 您是否需要提供每个图标尺寸才能将您的应用发布到应用商店?iOS
- python - 如何在python中创建一个链表
- python - 使用 write() 方法合并两个文本文件时删除了行
- c# - A way to add int value to textbox with a button click and then subtract from the int value with another button