Czy za pomocą javascript można sprawdzić, czy zasób jest dostępny na serwerze? Na przykład mam obrazy 1.jpg - 5.jpg załadowane na stronę html. Chciałbym wywoływać funkcję JavaScript mniej więcej co minutę, która z grubsza wykonałaby następujący kod zdrapki ...
if "../imgs/6.jpg" exists:
var nImg = document.createElement("img6");
nImg.src = "../imgs/6.jpg";
Myśli? Dzięki!
javascript
0xhughes
źródło
źródło
fileExists
że będzie lepsza nazwa, ponieważ ta funkcja nie sprawdza, czy obraz istnieje na serwerze. Sprawdza, czy plik jest dostępny z serwera. Nie ma możliwości sprawdzenia, czy ten plik faktycznie jest obrazem. Może to być .pdf, .html, jakiś losowy plik o zmienionej nazwie na * .jpg lub * .png. Jeśli coś kończy się na .jpg, nie oznacza to, że jest to obraz w 100% :)Image
obiektu nie podlega temu ograniczeniu. Jedyną zaletą jest to, że faktycznie nie pobierze obrazu.Możesz użyć podstawowego sposobu działania modułu wstępnego ładowania obrazu, aby sprawdzić, czy obraz istnieje.
JSFiddle
źródło
return
stwierdzenia takiego jak @ajtrichards w pierwszej części jego odpowiedzi.Możesz po prostu sprawdzić, czy obraz się ładuje, czy nie, używając wbudowanych zdarzeń, które są dostarczane dla wszystkich obrazów.
onload
Ionerror
wydarzenia powie, czy obraz załadowany pomyślnie lub jeśli wystąpił błąd:źródło
error
procedurę obsługi.Jeśli ktoś wejdzie na tę stronę i chce to zrobić w kliencie opartym na React , możesz zrobić coś takiego jak poniżej, która była oryginalną odpowiedzią dostarczoną przez Sophię Alpert z zespołu React tutaj
źródło
Lepszym i nowoczesnym podejściem jest użycie ES6 Fetch API do sprawdzenia, czy obraz istnieje, czy nie:
Upewnij się, że wykonujesz żądania tego samego pochodzenia lub na serwerze jest włączony mechanizm CORS.
źródło
Jeśli utworzysz tag obrazu i dodasz go do DOM, powinno zostać uruchomione zdarzenie onload lub onerror. Jeśli wystąpi błąd onerror, obraz nie istnieje na serwerze.
źródło
Możesz wywołać tę funkcję JS, aby sprawdzić, czy plik istnieje na serwerze:
źródło
Basicaly promisified wersja @espascarello i @adeneo odpowiedzi, z parametrem awaryjnej:
Uwaga: rozwiązanie może mi się
fetch
bardziej podobać , ale ma wadę - jeśli Twój serwer jest skonfigurowany w określony sposób, może zwrócić 200/304, nawet jeśli Twój plik nie istnieje. To z drugiej strony wystarczy.źródło
fetch
, można użyćok
własnośćresponse
obiektu, aby sprawdzić, czy wniosek był udany czy nie:fetch(url).then(res => {if(res.ok){ /*exist*/} else {/*not exist*/}});
background-image: url('/a/broken/url')
daje mi200
iok
(Chrome 74).Możesz to zrobić za pomocą swoich axiosów, ustawiając względną ścieżkę do odpowiedniego folderu obrazów. Zrobiłem to, aby uzyskać plik JSON. Możesz wypróbować tę samą metodę dla pliku obrazu, możesz odnieść się do tych przykładów
Jeśli ustawiłeś już instancję axios z baseurl jako serwer w innej domenie, będziesz musiał użyć pełnej ścieżki do statycznego serwera plików, na którym wdrażasz aplikację internetową.
Jeśli obraz zostanie znaleziony, odpowiedź będzie wynosić 200, a jeśli nie, będzie to 404.
Ponadto, jeśli plik obrazu znajduje się w folderze zasobów wewnątrz src, możesz wykonać wymaganie, pobrać ścieżkę i wykonać powyższe wywołanie z tą ścieżką.
źródło
To działa dobrze:
źródło
Możesz odesłać ten link, aby sprawdzić, czy istnieje plik obrazu z JavaScript.
źródło