Wpis z mikrobloga

Dlaczego:

var ip_address = '';

    //get user ip address
    jQuery.getJSON("[http://jsonip.appspot.com?callback=?",](http://jsonip.appspot.com?callback=?",)
            function (data) {
                ip_address = data.ip;
                alert(ip_address);
            });
    
```Wyświetla adres ip, ale już:```
var ip_address = '';
``````
    //get user ip address
    jQuery.getJSON("[http://jsonip.appspot.com?callback=?",](http://jsonip.appspot.com?callback=?",)
            function (data) {
                ip_address = data.ip;                
            });
    alert(ip_address);

Wyświetla mi pusty string?

#webdev #jquery #javascript
  • 13
  • Odpowiedz
@Ten_od_Hanki: @bez_plomienia: @Lew_Bartosz:
Myślałem, że skoro deklaruję zmienną przed funkcją i przypiszę do niej wartość w funkcji, to będę mógł z niej korzystać i po funkcji.
@wombatlbn: @advokoot: @duch_revolucyji: więc wrzucenie

jQuery.getJSON("[http://jsonip.appspot.com?callback=?",](http://jsonip.appspot.com?callback=?",)
            function (data) {
                ip_address = data.ip;
            });

Do funkcji i zwrócenie wartości rozwiąże problem?
  • Odpowiedz
@mariecziek: ta funkcja w getJSON jest odpalana dopiero jak się zakończy "ładować" wywoływana strona. Więc może to nastąpić po 5s, po 20s a nawet i po 15 minutach. To jest coś w stylu oddzielnego wątku.

Żeby to zadziałało tak jak chcesz, to odwołanie do appspota musiałbyś zrobić synchroniczne, co jednak by spowodowało, że na czas ładowania cała przeglądarka złapie freeza.
  • Odpowiedz
@mariecziek: Racja, pomyliłem się, myśląc że zmienną deklarujesz wewnątrz funkcji i chcesz mieć do niej dostęp spoza funkcji. Chodzi o callback, ajax wykonuję callback po uzyskaniu odpowiedzi. I widzę że cumple dostatecznie to wytłumaczyli.
  • Odpowiedz