【问题标题】:Can I catch http errors when using jQuery to modify styles?使用 jQuery 修改样式时可以捕获 http 错误吗?
【发布时间】:2013-09-03 13:22:48
【问题描述】:

如果我使用 jQuery 来设置页面的背景图像,如下所示:

$('body').css({
    "background-image": 'url(' + myImageUrl + ')'
});

如何检测和处理可能从图像 URL 返回的 HTTP 错误(500、503、404 等)?

我确实找到了一个注册回调的 jQuery .error() 方法,但它在 1.8 中被标记为已弃用,没有说明应该用什么来替换它。 (我似乎也无法让它工作,无论是否被弃用。)


根据 cmets 和下面的答案,我尝试了这种变体,它似乎有效,但答案却被否决了。这有什么不好的原因吗?

$('<img>').error(function(obj) {
    alert('error');
}).load(function() {
    $('body').css({
        "background-image": 'url(' + myImageUrl + ')'
    });
}).attr('src', myImageUrl);

【问题讨论】:

  • .error() 无论如何都不会明白这一点。确保预加载图像并查看它是否加载的唯一方法。之后将其应用于 bg 图像。
  • 您总是可以先发出 ajax 请求进行检查,但这会产生可能的开销。

标签: javascript jquery error-handling


【解决方案1】:

试试这个

jQuery

Live Demo

var $image = $("<img />");
$image.on("error",function() { 
  $('body').css({
    "background-image": 'url(defaultimage.jpg)'
  });
}).on("load",function() {
  $('body').css({
    "background-image": 'url(' + myImageUrl + ')'
  });
}).attr("src",myImageUrl);

JavaScript:

var image = new Image();
image.onerror=function() { 
  document.body.style.backgroundImage="url(defaultimage.jpg)"
}
image.onload=function() {
  document.body.style.backgroundImage="url("+myImageUrl+")"
}
image.src=myImageUrl;

【讨论】:

  • 我同意。在不解释原因的情况下投反对票是很荒谬的。它帮助没有人! @JC 如果您喜欢这个答案,请随时点赞并接受。
  • 不知道为什么投反对票。这是一个合理的想法。唯一的缺点是两次加载图像,考虑到缓存,这应该是最小的影响。我不需要默认图像位,但它是一个很好的接触。谢谢。
  • 很好 - 是的,图像应该来自缓存
猜你喜欢
  • 2019-08-25
  • 2012-01-11
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多