2015-04-29 3 views
0

Я работаю над приложением, которое будет обслуживать некоторое изображение для клиента, и когда-то изображение может быть пустым, и мы используем Spring mvc в качестве контроллера, это ядро коды:Как браузер определяет событие onerror для img

@RequestMapping 
public ResponseEntity<byte[]> getImg(String id) { 
    byte[] res = imgService.find(id); // this res may be null 
    headers.setDate("Expires", System.currentTimeMillis() + 24 * 3600 * 1000 * 7); 
    return ResponseEntity.ok().headers(headers).contentType(MediaType.IMAGE_PNG).body(res); 
} 

Как показано, код ответа всегда будет 200 независимо от того, существует ли изображение.

И на стороне клиента после загрузки изображения я добавлю событие onerror для изображения, однако я обнаружил, что событие onerror будет запущено, как только сервер не сможет найти изображение (что означает, что тело может быть null), даже код состояния равен 200.

Затем я попытался вернуть фиксированное изображение, если требуемое изображение отсутствует, а событие onerro не запускается.

Так что, интересно, как браузер считает определенную ошибку загрузки img, кажется, что он не основан на коде состояния.

Любые документы по этому вопросу?

+0

Вы уверены, что byte [] res = imgService.find (id); res возвращает ваше изображение, или просто в вашем комментарии оно будет null. Таким образом, в вашем вопросе «изображение (что означает, что тело может быть нулевым), даже код состояния равен 200». Это означает, что вы должны проверить, что если данные имеют значение null, вы должны добавить onerror, статус 200 означает, что в HTTP-протоколе ошибки не было. – erhun

ответ

0

Добавление регистратора событий в тег Img и вызов вашей пользовательской логики.

Пример кода:

<img id="photo" 
    onload='loaded(this.id)' 
    src="" 
    alt="alt text" 
    /> 

Существует запись о том, как обнаружить ошибки загрузки изображения. Post 1, обнаружение с использованием простого Javascript, а также this.

Смежные вопросы