É possível recarregar uma imagem com um nome de arquivo idêntico de um servidor usando jQuery?
Por exemplo, eu tenho uma imagem em uma página, no entanto, a imagem física pode mudar com base nas ações do usuário. Observe que isso não significa que o nome do arquivo seja alterado, mas o próprio arquivo real.
ou seja:
- O usuário visualiza a imagem na página padrão
- Usuário envia nova imagem
- A imagem padrão na página não muda (suponho que isso seja devido ao nome do arquivo ser idêntico, o navegador usa a versão em cache)
Independentemente da frequência com que o código abaixo é chamado, o mesmo problema persiste.
$("#myimg").attr("src", "/myimg.jpg");
Na documentação do jQuery, a função "load" seria perfeita se tivesse um método padrão de acionar o evento, em vez de vincular uma função de retorno de chamada a uma carga completa / bem-sucedida de um elemento.
Qualquer assistência é muito apreciada.
Respostas:
Parece que seu navegador está armazenando em cache a imagem (que agora notei que você escreveu em sua pergunta). Você pode forçar o navegador a recarregar a imagem passando uma variável extra da seguinte maneira:
fonte
random
, e não deve nunca ser comDate
menos que você é realmente muito rápido. ; ^) A obtenção de uma data no cliente não consome muitos recursos e você pode reutilizar quantas imagens precisar para obter de uma só vez, então vá para a etapa 4. Lucro.Provavelmente não é a melhor maneira, mas resolvi esse problema no passado simplesmente anexando um carimbo de data / hora ao URL da imagem usando JavaScript:
Na próxima vez que carregar, o carimbo de data e hora será definido como o horário atual e o URL será diferente; portanto, o navegador fará um GET para a imagem em vez de usar a versão em cache.
fonte
imagename.jpg?t=1234567&q=.jpg
ouimagename.jpg#t1234567.jpg
Este pode ser um dos dois problemas que você mencionou.
Para ser sincero, acho que é o número dois. Seria muito mais fácil se pudéssemos ver mais jQuery. Mas, para começar, tente remover o atributo primeiro e, em seguida, defina-o novamente. Só para ver se isso ajuda:
Mesmo que isso funcione, poste algum código, pois isso não é o ideal, imo :-)
fonte
com uma linha sem se preocupar em codificar a imagem src no javascript (obrigado a jeerose pelas idéias:
fonte
Para ignorar o cache e evitar adicionar carimbos de data e hora infinitos ao URL da imagem, retire o carimbo de data e hora anterior antes de adicionar um novo, é assim que eu fiz.
fonte
Isso funciona muito bem! no entanto, se você recarregar o src várias vezes, o carimbo de data e hora também será concatenado no URL. Eu modifiquei a resposta aceita para lidar com isso.
fonte
Você já tentou redefinir o HTML dos contêineres de imagens. Obviamente, se é o navegador que está armazenando em cache, isso não ajudaria.
fonte
Algumas vezes, na verdade, solução como -
também não atualizar src corretamente, tente isso, funcionou para mim ->
fonte
Usar "#" como um delimitador pode ser útil
Minhas imagens são mantidas em uma pasta "oculta" acima de "www", para que apenas usuários logados tenham acesso a elas. Por esse motivo, não posso usar o comum,
<img src=/somefolder/1023.jpg>
mas envio solicitações para o servidor<img src=?1023>
e ele responde enviando de volta a imagem mantida sob o nome '1023'.O aplicativo é usado para o corte de imagens; portanto, após uma solicitação do ajax para cortar a imagem, ela é alterada como conteúdo no servidor, mas mantém seu nome original. Para ver o resultado do corte, após a solicitação do ajax ser concluída, a primeira imagem é removida do DOM e uma nova imagem é inserida com o mesmo nome
<img src=?1023>
.Para evitar descontar, adiciono à solicitação a tag "time" precedida de "#" para que se torne como
<img src=?1023#1467294764124>
. O servidor filtra automaticamente a parte de hash da solicitação e responde corretamente enviando de volta minha imagem mantida como '1023'. Assim, sempre recebo a última versão da imagem sem muita decodificação no servidor.fonte
Talvez eu precise recarregar a fonte da imagem várias vezes. Encontrei uma solução com a Lodash que funciona bem para mim:
Um registro de data e hora existente será truncado e substituído por um novo.
fonte
Com base na resposta de @kasper Taeymans.
Se você simplesmente precisar recarregar a imagem (não substitua src pelo smth new), tente:
fonte
}
fonte