• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed JavaScript - Ustawienie tego samego obrazka dwa razy

Object Storage Arubacloud
0 głosów
129 wizyt
pytanie zadane 26 września 2020 w JavaScript przez SZYMII Użytkownik (510 p.)
zamknięte 26 września 2020 przez SZYMII

Witam wszystkich, 

Postanowiłem ostatnio zrobić mini projekt związany z pogodą. Na ten moment jestem już na samej końcówce, pozostała mi tylko dynamiczne załadowanie obrazu i następnie wyświetlenie pogody.

No i właśnie z tym mam problem. Chce aby po zapytaniu i pobraniu danych z API, następnie JS ustawił dwa razy w innych miejscach w kodzie to samo zdjęcie i co najważniejsze załadował je tylko raz. Próbowałem zrobić to za pomocą konstruktora Image(), zwykłym innerHTML itd., ale nic nie działa i teraz nie wiem czy ja to robię źle czy nie ma po prostu takiej możliwości.

Dla jasności podsyłam zrzut ekranu projektu, ponieważ wydaje mi się, że kod akurat do tego problemu jest zbędny:

Link do zdjęcia

komentarz zamknięcia: Rozwiązanie problemu
komentarz 26 września 2020 przez Comandeer Guru (601,450 p.)
Na tym obrazku praktycznie nic nie widać.
komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)
Teraz powinno być już dobrze
komentarz 26 września 2020 przez Comandeer Guru (601,450 p.)
A mógłbyś jeszcze pokazać, jak wyglądają nagłówki odpowiedzi HTTP dla tego zdjęcia?
komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)

2 odpowiedzi

+3 głosów
odpowiedź 26 września 2020 przez Comandeer Guru (601,450 p.)
wybrane 26 września 2020 przez SZYMII
 
Najlepsza

Nagłówki odpowiedzi wskazują na to, że jest wyłączony cache (Cache-Control: public, max-age=0). Prawdopodobnie to powoduje, że obrazek jest zawsze zaczytywany na nowo.

Dodatkowo masz zaznaczoną opcję "Disable cache" w devtools ;)

komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)
Faktycznie, zapomniałem to odznaczysz po ostatnim projekcie, teraz wszystko działa poprawnie :D
+1 głos
odpowiedź 26 września 2020 przez adamsawicki Bywalec (2,260 p.)
Pokazałbyś kod w którym używasz `Image()`?
komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)

Niestety nie mam go już, ale wyglądał on mniej więcej tak:

let _img = document.getElementById('id1');
let _img2 = document.getElementById('id2');

const img = new Image();

img.addEventListener("load", () => {
    _img.src = img.src;
    _img2.src = img.src;

    //Dalej pojawia się pogoda
});

img.src = 'http://local..';

 

komentarz 26 września 2020 przez adamsawicki Bywalec (2,260 p.)

Tutaj jest przykład rozwiązania zgodnie z kodem który podałeś - pobiera obraz tylko raz https://jsfiddle.net/kt84om9x/

Sprawdź pozostałą część swojej aplikacji, może gdzieś jeszcze robisz dodatkowy request.

komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)
edycja 26 września 2020 przez SZYMII
        let weather_background_wrapper_img = document.querySelector('.weather-background-wrapper-img');
        let weather_background_img = document.querySelector('.weather-background-img');

        const img = new Image();

        img.addEventListener("load", () => {
            weather_background_wrapper_img.src = img.src;
            weather_background_img.src = img.src

            loader.style.visibility = "hidden";
            weather_cnt.style.visibility = "visible";
            weather_background_wrapper.style.visibility = "visible";
        });

        img.src = "img/background/background-" + status + ".jpg";

Tak wygląda kod w tym momencie u mnie i dalej występuje problem, jednak doszedłem do wniosku, że jeśli w ostatniej linijce zamiast własnego zdjęcia dam z zewnętrznego serwera (tak jak ty z logo Google) to wszystko działa.

Sprawdziłem i zdjęcie jest ładowane za pośrednictwem 7 i 15 linijki kodu.

komentarz 26 września 2020 przez adamsawicki Bywalec (2,260 p.)
Hmm... nie powinno mieć znaczenia czy pobierasz zasób z tego samego czy innego hosta, a przynajmniej nie jestem świadomy dlaczego miałoby to mieć znaczenie.
komentarz 26 września 2020 przez SZYMII Użytkownik (510 p.)

Problem został rozwiązany przez Comandeer, jak się okazało to zapomniałem włączyć zapisywanie pamięci podręcznej po ostatnim projekcie :D Ale i tak dzięki za poświęcony czas i pomoc yes

Podobne pytania

0 głosów
2 odpowiedzi 166 wizyt
pytanie zadane 28 października 2016 w HTML i CSS przez Giovacho Użytkownik (960 p.)
0 głosów
1 odpowiedź 1,612 wizyt
0 głosów
1 odpowiedź 775 wizyt
pytanie zadane 30 września 2015 w JavaScript przez Krzysztof Wielgat Nowicjusz (220 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...