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

Jak zapisać globalnie zmienną otrzymaną poprzez ajax request.

VPS Starter Arubacloud
+1 głos
260 wizyt
pytanie zadane 26 stycznia 2021 w JavaScript przez matcba Nowicjusz (160 p.)

Cześć, chcę przeliczyć kurs walut na Euro. Muszę skorzystać z NPB api w formie xml. Zapytanie działa, pobiera dane o które mi chodzi niestety muszę zapisać je globalnie aby użyć w innej funkcji. Jak mogę zapisać globalnie wynik ajax requestu?

                             var xmlPrice;
				$.ajax({
					async: false,
					type: "GET",
					url: "http://api.nbp.pl/api/exchangerates/rates/a/eur/",
					cache: false,
					dataType: "xml",
					success: function(xml) {
						var xmlPrice = $(xml).find('Rates Rate Mid').text()
						console.log(xmlPrice);
					}
				});
				console.log(xmlPrice);

 

1
komentarz 26 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

 muszę zapisać je globalnie aby użyć w innej funkcji

A dlaczego musisz zapisać globalnie? Nie możesz przekazać wyniku z Ajaxa bezpośrednio do funkcji? 

komentarz 26 stycznia 2021 przez matcba Nowicjusz (160 p.)
Nie za bardzo wiem jak to zrobić.
1
komentarz 26 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Po prostu: 

    success: function(xml) {
        var xmlPrice = $(xml).find('Rates Rate Mid').text()
        console.log(xmlPrice);

       // tutaj wywołaj docelową funkcję przekazując jej zmienną xmlPrice
    }

Bo jak inaczej chcesz wywołać docelową funkcję, gdy Ajax się skończy? Skąd będziesz wiedział kiedy się skończy?

2 odpowiedzi

+1 głos
odpowiedź 26 stycznia 2021 przez Bizuma Gaduła (3,650 p.)
wybrane 26 stycznia 2021 przez matcba
 
Najlepsza

Możesz przypisać wynik do "najwyższego" obiektu jakim jest w przypadku przeglądarki "window".

window.someValue = "ajax request result";

Potem możesz bezpośrednio odwoływać się już w kodzie do podanej wartości lub poprzez obiekt window jeżeli napiszesz wartość lokalnie.

 

komentarz 26 stycznia 2021 przez matcba Nowicjusz (160 p.)

Dzięki, tak zrobiłem i działa:

 

				function ajaxCall(callback){
					$.ajax({
						async: false,
						type: "GET",
						url: "http://api.nbp.pl/api/exchangerates/rates/a/eur/",
						cache: false,
						dataType: "xml",
						success: function(xml) {
							var xmlPrice = $(xml).find('Rates Rate Mid').text()
							window.euroXml = xmlPrice;
						}
					});
				}
				ajaxCall();

 

1
komentarz 26 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

A jak w tym kodzie wykorzystujesz argument callback, skoro go nawet nie przekazujesz przy wywołaniu funkcji ajaxCall?

komentarz 26 stycznia 2021 przez VBService Ekspert (251,210 p.)

@matcba, wink

      $.ajax({
        async: false,
        type: "GET",
        url: "https://api.nbp.pl/api/exchangerates/rates/a/eur/",
        cache: false,
        dataType: "xml",
        success: function(xml) {
          window.euroXml  = $(xml).find('Rates Rate Mid').text();
        },
        error: function(xhr, status, error) {
          window.euroXml  = 0;         
      	}
      });

 

+1 głos
odpowiedź 26 stycznia 2021 przez pablop76 VIP (123,060 p.)
edycja 26 stycznia 2021 przez pablop76

Tak jak napisał @ScriptyChris użyj callbacka, albo odpowiednika promise (deferred) w jQuery, jeżeli już korzystasz z tej biblioteki. Tak jak chcesz to zrobić musiałbyś zmienić funkcje na synchroniczną co nie jest w tym przypadku wskazane.

Podobne pytania

0 głosów
1 odpowiedź 364 wizyt
0 głosów
1 odpowiedź 248 wizyt
0 głosów
0 odpowiedzi 1,023 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...