Як перевірити, чи існує зображення із вказаною URL-адресою?


77

Я хочу перевірити, чи існує зображення за допомогою jquery.

Наприклад, як я можу перевірити, чи існує це зображення

http://www.google.com/images/srpr/nav_logo14.png 

чек повинен дати мені 200 або статус добре

-------------- відредаговано -------------------

var imgsrc = $(this).attr('src');
var imgcheck = imgsrc.width;


if (imgcheck==0) {
alert("You have a zero size image");
} else { //do rest of code }

Дякую Жан


1
Ви цілком в межах своїх прав розміщувати повідомлення та приймати відповідь на власне запитання.
sje397

Відповіді:


77

Використовуйте errorобробник так:

$('#image_id').error(function() {
  alert('Image does not exist !!');
});

Якщо зображення не вдається завантажити (наприклад, оскільки його немає на вказаній URL-адресі), відображається попередження:

Оновлення:

Я думаю, використовуючи:

$.ajax({url:'somefile.dat',type:'HEAD',error:do_something});

було б достатньо, щоб перевірити на 404.

Більше читань:

Оновлення 2:

Ваш код повинен бути таким:

$(this).error(function() {
  alert('Image does not exist !!');
});

Не потрібно цих рядків, і це не перевірить, чи існує віддалений файл у будь-якому випадку:

var imgcheck = imgsrc.width;    

if (imgcheck==0) {
  alert("You have a zero size image");
} else { 
  //execute the rest of code here 
}

@sAc Я не маю ідентифікатора зображень, просто хочу перевірити, чи присутній файл, інакше переходжу до виконання решти коду
X10nD

@Jean: Будь ласка, опублікуйте свій код у своєму питанні, щоб побачити, що у вас є або як вам це потрібно.
Сарфраз

Якщо ви подивитесь на цю URL-адресу google.com/images/srpr/nav_logo14.png , якщо зображення присутнє, воно повинно вказати мені розмір або статус 200 / добре
X10nD

@sAc imgsrc.width, здається, не працює. Я використовую URL-адресу зображення, щоб отримати ширину ... URL-адреса зображення передається, перевіряється за попередженням
X10nD

1
У більшості випадків вам потрібно буде додати async: false до виклику AJAX, інакше він повернеться через певний випадковий інтервал і може спричинити нестабільні результати у вашому сценарії.
Lance Cleveland,

35
$.ajax({
    url:'http://www.example.com/somefile.ext',
    type:'HEAD',
    error: function(){
            //do something depressing
    },
    success: function(){
            //do something cheerful :)
    }
});

з: http://www.ambitionlab.com/how-to-check-if-a-file-exists-using-jquery-2010-01-06


15
ПОПЕРЕДЖЕННЯ: Ви отримаєте помилку: [XMLHttpRequest не може завантажити not.on.your.domain.com/someimg.jpg . На запитаному ресурсі немає заголовка 'Access-Control-Allow-Origin'.] Отже, це хороший вибір, лише якщо зображення знаходиться на вашому сервері.
Дванадцять24,

13

якщо воно не існує, завантажте зображення за замовчуванням або помилку обробки

$('img[id$=imgurl]').load(imgurl, function(response, status, xhr) {
    if (status == "error") 
        $(this).attr('src', 'images/DEFAULT.JPG');
    else
        $(this).attr('src', imgurl);
    });

Це правильна відповідь, ви також можете використовувати$('<img>').load(url ...
Lightbeard

5

Приклад використання

$('#myImg').safeUrl({wanted:"http://example/nature.png",rm:"/myproject/images/anonym.png"});

API:

$.fn.safeUrl=function(args){
  var that=this;
  if($(that).attr('data-safeurl') && $(that).attr('data-safeurl') === 'found'){
        return that;
  }else{
       $.ajax({
    url:args.wanted,
    type:'HEAD',
    error:
        function(){
            $(that).attr('src',args.rm)
        },
    success:
        function(){
             $(that).attr('src',args.wanted)
             $(that).attr('data-safeurl','found');
        }
      });
   }


 return that;
};

Примітка: rmтут означає управління ризиками.


Ще один варіант використання:

$('#myImg').safeUrl({wanted:"http://example/1.png",rm:"http://example/2.png"})
.safeUrl({wanted:"http://example/2.png",rm:"http://example/3.png"});
  • ' http://example/1.png': якщо не існує ' http://example/2.png'

  • ' http://example/2.png': якщо не існує ' http://example/3.png'


4

Від сюди :

// when the DOM is ready
$(function () {
  var img = new Image();
  // wrap our new image in jQuery, then:
  $(img)
    // once the image has loaded, execute this code
    .load(function () {
      // set the image hidden by default    
      $(this).hide();
      // with the holding div #loader, apply:
      $('#loader')
        // remove the loading class (so no background spinner), 
        .removeClass('loading')
        // then insert our image
        .append(this);
      // fade our image in to create a nice effect
      $(this).fadeIn();
    })
    // if there was an error loading the image, react accordingly
    .error(function () {
      // notify the user that the image could not be loaded
    })
    // *finally*, set the src attribute of the new image to our image
    .attr('src', 'images/headshot.jpg');
});

2

jQuery 3.0 видалено .error . Зараз є правильний синтаксис

$(this).on('error', function(){
    console.log('Image does not exist: ' + this.id); 
});

0

Щоб впоратися з ледачим завантаженням із перевіркою існування зображення, я дотримувався цього в jQuery-

$('[data-src]').each(function() {
  var $image_place_holder_element = $(this);
  var image_url = $(this).data('src');
  $("<div class='hidden-classe' />").load(image_url, function(response, status, xhr) {
    if (!(status == "error")) {
      $image_place_holder_element.removeClass('image-placeholder');
      $image_place_holder_element.attr('src', image_url);
    }
  }).remove();
});

Причина: якщо я використовую $image_place_holder_element.load()метод, це буде додавання відповіді до елемента, тому випадковий div та його видалення виявилися хорошим рішенням. Сподіваюся, це працює для тих, хто намагається реалізувати ліниве завантаження разом з перевіркою url.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.