Usando javascript, há uma maneira de saber se um recurso está disponível no servidor? Por exemplo, tenho imagens 1.jpg - 5.jpg carregadas na página html. Gostaria de chamar uma função JavaScript a cada minuto ou mais, que faria aproximadamente o seguinte código de rascunho ...
if "../imgs/6.jpg" exists:
var nImg = document.createElement("img6");
nImg.src = "../imgs/6.jpg";
Pensamentos? Obrigado!
javascript
0xhughes
fonte
fonte
fileExists
que seria um nome melhor, porque essa função não verifica se a imagem existe no servidor. Ele verifica se o arquivo está acessível no servidor. Não há como verificar se esse arquivo é realmente uma imagem. Pode ser .pdf, .html, algum arquivo aleatório renomeado para * .jpg ou * .png. Se extremidades algo com .jpg isso não significa que ele é 100% imagem :)Image
objeto não sofre essa limitação. A única vantagem disso é que ele não fará o download da imagem.Você pode usar o modo básico como os pré-carregadores de imagens funcionam para testar se existe uma imagem.
JSFiddle
fonte
return
declaração como @ajtrichards na primeira parte de sua resposta.Você pode apenas verificar se a imagem carrega ou não, usando os eventos internos fornecidos para todas as imagens.
Os eventos
onload
eonerror
informarão se a imagem foi carregada com sucesso ou se ocorreu um erro:fonte
error
manipulador.Se alguém chegar a esta página procurando fazer isso em um cliente baseado no React , você pode fazer algo como o abaixo, que foi uma resposta original fornecida por Sophia Alpert da equipe do React aqui
fonte
Uma abordagem melhor e moderna é usar a API de busca do ES6 para verificar se uma imagem existe ou não:
Verifique se você está fazendo as solicitações da mesma origem ou se o CORS está ativado no servidor.
fonte
Se você criar uma tag de imagem e adicioná-la ao DOM, seu evento onload ou onerror deverá ser acionado. Se um erro for disparado, a imagem não existe no servidor.
fonte
Você pode chamar essa função JS para verificar se o arquivo existe no servidor:
fonte
Basicamente um promisified versão do @espascarello e respostas @adeneo, com um parâmetro de fallback:
Nota: Eu pessoalmente gosto mais da
fetch
solução, mas ela tem uma desvantagem - se o servidor estiver configurado de uma maneira específica, ele poderá retornar 200/304, mesmo que o arquivo não exista. Por outro lado, isso fará o trabalho.fonte
fetch
, você pode usar aok
propriedade doresponse
objeto para verificar se a solicitação foi bem-sucedida ou não:fetch(url).then(res => {if(res.ok){ /*exist*/} else {/*not exist*/}});
background-image: url('/a/broken/url')
me dá200
eok
(Chrome 74).Você pode fazer isso com seus axios definindo o caminho relativo para a pasta de imagens correspondente. Eu fiz isso para obter um arquivo json. Você pode tentar o mesmo método para um arquivo de imagem, pode consultar estes exemplos
Se você já definiu uma instância do axios com baseurl como um servidor em um domínio diferente, precisará usar o caminho completo do servidor de arquivos estático no qual implementa o aplicativo Web.
Se a imagem for encontrada, a resposta será 200 e, se não, será 404.
Além disso, se o arquivo de imagem estiver presente na pasta assets dentro do src, você poderá solicitar, obter o caminho e fazer a chamada acima com esse caminho.
fonte
Isso funciona bem:
fonte
Você pode consultar este link para verificar se existe um arquivo de imagem com JavaScript.
fonte