Можно ли перезагрузить изображение с идентичным именем файла с сервера с помощью jQuery?
Например, у меня есть изображение на странице, однако физическое изображение может меняться в зависимости от действий пользователя. Обратите внимание, это не означает, что имя файла изменяется, а сам файл.
то есть:
- Пользователь просматривает изображение на странице по умолчанию
- Пользователь загружает новое изображение
- Изображение по умолчанию на странице не изменяется (я полагаю, это связано с тем, что имя файла идентично, браузер использует кэшированную версию)
Независимо от того, как часто вызывается приведенный ниже код, одна и та же проблема сохраняется.
$("#myimg").attr("src", "/myimg.jpg");
В документации jQuery функция «load» была бы идеальной, если бы у нее был метод запуска события по умолчанию, а не привязка функции обратного вызова к успешной / полной загрузке элемента.
Любая помощь очень ценится.
Ответы:
Похоже, это ваш браузер кэширует изображение (которое, как я теперь заметил, вы написали в своем вопросе). Вы можете заставить браузер перезагрузить изображение, передав дополнительную переменную следующим образом:
источник
random
, и никогда не должно быть с ,Date
если вы не на самом деле очень быстро. ; ^) Получение даты на клиенте не так ресурсоемко, и вы можете повторно использовать столько изображений, сколько вам нужно вытащить одновременно, поэтому перейдите к шагу 4. Прибыль.Возможно, это не самый лучший способ, но в прошлом я решил эту проблему, просто добавив метку времени к URL-адресу изображения с помощью JavaScript:
При следующей загрузке отметка времени будет установлена на текущее время, а URL-адрес будет другим, поэтому браузер выполняет GET для изображения вместо использования кэшированной версии.
источник
imagename.jpg?t=1234567&q=.jpg
илиimagename.jpg#t1234567.jpg
Это может быть одной из двух проблем, которые вы упоминаете сами.
Если честно, я думаю, что это номер два. Было бы намного проще, если бы мы могли увидеть еще jQuery. Но для начала попробуйте сначала удалить атрибут, а затем установить его снова. Просто чтобы посмотреть, поможет ли это:
Даже если это работает, выложите некоторый код, так как это не оптимально, IMO :-)
источник
с одной строкой, не беспокоясь о жестком кодировании изображения src в javascript (спасибо jerose за идеи:
источник
Чтобы обойти кэширование и избежать добавления бесконечных временных меток к URL-адресу изображения, удалите предыдущую временную метку перед добавлением новой, вот как я это сделал.
источник
Это прекрасно работает! однако, если вы перезагрузите src несколько раз, отметка времени также будет объединена с URL. Я изменил принятый ответ, чтобы справиться с этим.
источник
Вы пытались сбросить изображения контейнеров HTML. Конечно, если браузер кэширует, это не поможет.
источник
Иногда на самом деле решение вроде -
также не обновите src должным образом, попробуйте это, у меня получилось ->
источник
Использование «#» в качестве разделителя может быть полезным
Мои изображения хранятся в «скрытой» папке над «www», поэтому доступ к ним имеют только зарегистрированные пользователи. По этой причине я не могу использовать обычные,
<img src=/somefolder/1023.jpg>
но я отправляю запросы на сервер как,<img src=?1023>
и он отвечает, отправляя обратно изображение, сохраненное под именем «1023».Приложение используется для обрезки изображения, поэтому после Ajax-запроса обрезать изображение оно изменяется как содержимое на сервере, но сохраняет свое первоначальное имя. Чтобы увидеть результат обрезки, после завершения запроса ajax первое изображение удаляется из DOM, и новое изображение вставляется с тем же именем
<img src=?1023>
.Чтобы избежать обналичивания, я добавляю к запросу тег «time» с добавлением «#», чтобы он выглядел как
<img src=?1023#1467294764124>
. Сервер автоматически отфильтровывает хеш-часть запроса и правильно отвечает, отправляя обратно мое изображение, сохраненное как «1023». Таким образом, я всегда получаю последнюю версию изображения без особого декодирования на стороне сервера.источник
Возможно, мне придется перезагрузить источник изображения несколько раз. Я нашел решение с Lodash, которое хорошо работает для меня:
Существующая временная метка будет обрезана и заменена новой.
источник
Основано на ответе @kasper Taeymans.
Если вам просто нужно перезагрузить образ (не заменить src на что-то новое), попробуйте:
источник
}
источник