Chcę ładować obrazy zewnętrzne na mojej stronie asynchronicznie za pomocą jQuery i wypróbowałem następujące rozwiązania:
$.ajax({
url: "http://somedomain.com/image.jpg",
timeout:5000,
success: function() {
},
error: function(r,x) {
}
});
Ale zawsze zwraca błąd, czy w ogóle można załadować taki obraz?
Próbowałem użyć .load
metody i działa, ale nie mam pojęcia, jak ustawić limit czasu, jeśli obraz nie jest dostępny (404). W jaki sposób mogę to zrobić?
javascript
jquery
ajax
image
jquery-load
Arief
źródło
źródło
Odpowiedzi:
Nie ma potrzeby Ajax. Możesz utworzyć nowy element obrazu, ustawić jego atrybut źródłowy i umieścić go gdzieś w dokumencie po zakończeniu ładowania:
źródło
paint
lub zlayout
pewnością opóźniając wszelkieonload
zależności zdarzeń.JEŚLI NAPRAWDĘ POTRZEBUJESZ UŻYWAĆ AJAX ...
Spotkałem się z przypadkami, w których obsługa załadunku nie była właściwym wyborem. W moim przypadku podczas drukowania za pomocą javascript. W rzeczywistości istnieją dwie opcje użycia stylu AJAX do tego:
Rozwiązanie 1
Użyj danych obrazu Base64 i usługi obrazu REST. Jeśli masz własną usługę internetową, możesz dodać skrypt JSP / PHP REST, który oferuje obrazy w kodowaniu Base64. Jak to jest przydatne? Natknąłem się na nową, fajną składnię do kodowania obrazu:
Możesz więc załadować dane obrazu Base64 za pomocą Ajax, a następnie po zakończeniu zbudować ciąg danych Base64 do obrazu! Świetna zabawa :). Polecam skorzystać z tej witryny http://www.freeformatter.com/base64-encoder.html do kodowania obrazu.
Rozwiązanie 2:
Oszukaj przeglądarkę, aby użyła jej pamięci podręcznej. Daje to przyjemną funkcję fadeIn (), gdy zasób znajduje się w pamięci podręcznej przeglądarki:
Jednak obie metody mają swoje wady: pierwsza działa tylko w nowoczesnych przeglądarkach. Drugi ma problemy z wydajnością i opiera się na założeniu, w jaki sposób będzie używana pamięć podręczna.
okrzyki, will
źródło
Używając jQuery możesz po prostu zmienić atrybut „src” na „data-src”. Obraz nie zostanie załadowany. Ale lokalizacja jest przechowywana ze znacznikiem. Które lubię.
Prosty fragment jQuery kopiuje data-src do src, który rozpocznie ładowanie obrazu, gdy będzie potrzebny. W moim przypadku, gdy strona się załadowała.
Założę się, że kod jQuery można by skrócić, ale w ten sposób jest to zrozumiałe.
źródło
data-
tagów, dostęp do nich jest nieco łatwiejszy przez$(element).data('src')
zamiast$(element).attr('data-src')
Powinno być lepsze niż Ajax, ponieważ jeśli jest to galeria i przeglądasz listę zdjęć, jeśli obraz jest już w pamięci podręcznej, nie wyśle kolejnego żądania do serwera. Będzie zażądać w przypadku jQuery / ajax i zwróci HTTP 304 (niezmodyfikowany), a następnie użyje oryginalnego obrazu z pamięci podręcznej, jeśli już tam jest. Powyższa metoda redukuje puste żądanie do serwera po pierwszej pętli obrazów w galerii.
źródło
Możesz użyć obiektów odroczonych do ładowania ASYNC.
Zwróć uwagę: image.onload musi znajdować się przed image.src, aby uniknąć problemów z cache.
źródło
Jeśli chcesz tylko ustawić źródło obrazu, możesz tego użyć.
źródło
To też działa ...
źródło
AFAIK, musiałbyś tutaj wykonać funkcję .load () jako dołączoną do .ajax (), ale możesz użyć jQuery setTimeout, aby utrzymać ją na żywo (ish)
źródło
użyj .load, aby załadować obraz. aby sprawdzić, czy pojawia się błąd (powiedzmy 404), możesz wykonać następujące czynności:
uwaga - zdarzenie .error () nie zostanie wywołane, gdy atrybut src jest pusty dla obrazu.
źródło
$ (funkcja () {
źródło