Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] reload obrazka na stronie
Forum PHP.pl > Forum > Po stronie przeglądarki
adamantd
Witam! Mam swoją captchę napisaną w php gd i postanowiłem sobie ją ulepszyć o odświeżanie obrazka po kliknięciu na niego. Prawie wszystko działa po za jednym -w Chrome wszystko jest tak jak powinno być -klikamy na obrazek jeśli jest niezbyt czytelny, pojawia się mały loader i po sekundzie mamy nowy obrazek a loader znika. We wszystkich innych przeglądarkach obrazek pomimo, że zostaje utworzony nowy to nie pokazuje się on na stronie w miejscu starego tylko wyświetla się cały czas stary. Czy chodzi o Cache przeglądarki? Jeśli tak to jak ją wyczyścić, żeby wczytała sobie nowy obrazek przedstawiam kod do refresha obrazka po kliknięciu

  1.  
  2.  
  3. var mtiPsm=0;
  4. $('#captcha_oglo').click(function(){
  5. if(mtiPsm==0){mtiPsm=1;} else {return false;}
  6. var $loaderTmpCapt = $('<img />')
  7. .attr({'id':'mtiPsmCaptLoad',
  8. 'src':'images/processing.gif',
  9. 'alt':'load...'
  10. })
  11. .css({
  12. 'width':'16px',
  13. 'height':'16px',
  14. 'position':'absolute',
  15. 'top':'10px',
  16. 'left':'-35px',
  17. 'zIndex':'99999'
  18. });
  19. $('#parentTdCaptcha').append($loaderTmpCapt);
  20. $.post('wsp_scr.php?captcha_rand=rand', function(){
  21. $('#captcha_oglo').attr('src','CLASS/Captcha/fotoCapt.jpg');
  22. $('#mtiPsmCaptLoad').remove();
  23. mtiPsm=0;
  24. });
  25. });
  26.  
  27.  
  28.  


Tu gdzie nadaję atrybut src dla #captcha_oglo jest to taka sama ścieżka jak była przed kliknięciem -tak jak pisałem wyżej w chromie działa, co mogę robić nie tak?

Próbowałem też obchodzić to w jakiś sposób wzorując się na min.

http://forum.php.pl/index.php?showtopic=85511

ponieważ zmiana obrazka na obrazek z inną nazwą odbywa się bez problemu pod wszystkimi przeglądarkami. Pozmieniałem trochę skrypt tworzenia obrazka captcha i jest zapisywany na zmianę z dwoma końcówkami 1 lub 2 i w zależności jaki jest na stronie po refreshu obrazka na nowy wczytywany jest z inną literką. Ale niestety wtedy do cache przeglądarki zapisane są po prostu dwa obrazki o tych dwóch różnych nazwach i kiedy refreshuję obrazek to pokazują się właśnie one naprzemiennie.
expert
Spróbuj do adresu obrazka dodać:
Kod
'CLASS/Captcha/fotoCapt.jpg?_='+(new Date()).getTime()


W różnych przeglądarkach jest różnie, a z tym sposobem nigdy nie miałem problemów.
adamantd
Chyba będziesz moim nowym mentorem od tej pory smile.gif kod działa pod wszystkimi przeglądarkami choć nie wiem dlaczego tak jest?
Dlaczego podpięcie do ścieżki do obrazka obiektu Date() oraz wywołanie getTime() powoduje, że obrazek się odświeża? Pytam bo może się to przydać jeszcze w przyszłości nie raz
expert
Dlatego, że (new Date()).getTime() to aktulany czas z dokładnością so do milisekundy i każde wywołanie tej funkcji da Ci zawsze inną liczbę. Podpinając to do adresu obrazka, zawsze będziesz miał inny adres, nawet zmiania z 234234234234234 na 234234234234235 to już inny adres dla przeglądarki. Jedyny wyjątek, gdy w tej samej mili sekundzie wywołasz funkcję, to adres będzie ten sam. Ale to jest bardzo mało prawdopodobne.
adamantd
Często używam podpinania do adresu po pytajniku różnych rzeczy np xxx.php?xxxx=www&eeeee=rrrrr ale nie wiedziałem, że można tak podpiąć do nazwy obrazka obrazek.jpg?_=xxxxx -obrazek wyskoczy ten sam bo do pytajnika nazwa jest nie zmieniona a to co jest po pytajniku to już nie ważne (ważne żeby było inne niż wcześniej)
rozumiem
dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.