javascript - 在 HTML Canvas 上加载图像时处理 Image.onerror 中的 404

标签 javascript html5-canvas

我已经编写了一些 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。

这段代码工作正常,但我想做的是在以下两种不同的情况下显示两条不同的消息:

  1. 当我收到 404 响应时。
  2. 当错误 500 响应时。

我无法弄清楚的是 - 如何在 img.onerror 中获取响应代码。

最佳答案

onerror method不提供有关发生的错误类型的任何信息。引用this Stackoverflow post ,“image.onerror 处理程序将收到一个事件参数,该参数不包含有关错误原因的任何信息”。

In this blog post你会发现一些提示如何处理可能不存在的图像加载。在您的情况下,一个快速的解决方案是在您可以访问网络状态的地方使用 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);

关于javascript - 在 HTML Canvas 上加载图像时处理 Image.onerror 中的 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57568665/

相关文章:

javascript - jQuery addClass 到子元素

javascript - event.preventDefault() 或 return false 在 IE9 中不起作用

javascript - 物体似乎出现在我的 Canvas 后面

javascript - 如何从JS中的图像获取DPI?

javascript - Phaser 游戏开发 - 菜单中箭头移动太快

javascript - 错误 : this. element.uniqueId 不是函数。 JQuery 用户界面。有人见过这个吗?

Javascript 通过 Outlook Express 打开电子邮件

javascript - 查找落在填充 Canvas 弧内的 x/y 坐标

javascript - 为什么将 blob 转换为数据 URI 会导致与直接数据 URI 方法不同的 URI?

javascript - Fabricjs:IText锁修改