Обновить изображение с помощью Javascript, но только если оно было изменено на сервере - PullRequest
2 голосов
/ 14 декабря 2009

Я хочу перезагрузить изображение на странице, если оно было обновлено на сервере. В других вопросах было предложено сделать что-то вроде

newImage.src = "http://localhost/image.jpg?" + new Date().getTime();

для принудительной повторной загрузки изображения, но это означает, что оно будет загружено снова, даже если оно действительно не изменилось .

Существует ли какой-либо код Javascript, который приведет к созданию нового запроса на то же изображение с правильным заголовком If-Modified-Since, поэтому изображение будет загружено только в том случае, если оно действительно изменилось?

ОБНОВЛЕНИЕ: Я все еще в замешательстве: если я просто запрашиваю типичный URL, я получу локально кэшированную копию. (если я не заставлю сервер пометить его как не кешируемый, но я не хочу этого делать, потому что вся идея состоит в том, чтобы не перезагружать его, пока он действительно не изменится.) Если я изменю URL, я всегда перезагружайте, потому что смысл нового URL - сломать кеш. Итак, как мне получить промежуточное поведение, которое я хочу, то есть загружать файл, только если он не соответствует локальной кэшированной копии?

Ответы [ 2 ]

1 голос
/ 14 декабря 2009

Вы должны взглянуть на метод xhr.setRequestHeader () . Это метод любого объекта XMLHttpRequest, и его можно использовать для установки заголовков в ваших Ajax-запросах. В jQuery вы можете легко добавить свойство beforeSend к вашему объекту ajax и установить там несколько заголовков.

Как говорится, кэширование с помощью Ajax может быть сложным. Возможно, вы захотите взглянуть на эту ветку в группах Google, так как есть несколько проблем, связанных с попыткой переопределить механизмы кэширования браузера. Вам нужно убедиться, что ваш сервер возвращает правильные заголовки управления кэшем, чтобы можно было заставить что-то подобное работать.

1 голос
/ 14 декабря 2009

Javascript не может прослушивать события на сервере. Вместо этого вы можете использовать некоторую форму длинных опросов или последовательных вызовов к серверу, чтобы увидеть, изменилось ли изображение.

...