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

Funkcja wykonujący się po załadowaniu Ajaxów

Object Storage Arubacloud
0 głosów
105 wizyt
pytanie zadane 25 lipca 2019 w JavaScript przez jacewojtek Nowicjusz (170 p.)
Mam problem i nie mogę znaleźć rozwiązania. Mam funkcję w JS, która z wykorzystaniem AJAX przesyła dane do skryptu PHP, który zwraca odpowiedź czy się udało czy nie.

Dane, które mają zostać przesłane są w tabeli i użytkownik wybiera zaznaczając checkboxy, które wiersze mają być przesłane. Jeden wiersz = jedno wywołanie przez AJAX skrypty PHP.

Chcę aby na czas wykonywania wszystkich zapytań AJAX strona się blokowała. Nakładam odpowiedniego overlaya, z ikonką ładowania i działa to ale tylko przez chwilę, do momentu otrzymania pierwszego wyniku.

Czy jest opcja, która sprawdza czy w tle wykonywane są jakiekolwiek czynności i po ich zakończeniu mogła by dopiero wyłaączać overlaya?

1 odpowiedź

+1 głos
odpowiedź 25 lipca 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 25 lipca 2019 przez ScriptyChris
 
Najlepsza
Wrzuć każde zapytanie w osobny promise, a w Promise.all() po wykonaniu wszystkich wyłącz overlay?
komentarz 25 lipca 2019 przez jacewojtek Nowicjusz (170 p.)
Ok, dzięki. Doszedłem do momentu, w którym overlay wyświetla się ciągle i nie mogę go przerwać.

Dodałem

Promise.all([
    mojaFunkcja(),
]).then(offOverlay());

Ale jakby nie uruchamia się samo, dopiero jak ręcznie wywołam z konsoli to overlay się wyłącza, jakiś pomysł?
komentarz 25 lipca 2019 przez Kamil Łydka Stary wyjadacz (13,600 p.)
edycja 25 lipca 2019 przez Kamil Łydka

Spróbuj tak

Promise.all([
    mojaFunkcja(),
]).then(function(){ off() } );

//czy w krótszej wersji

Promise.all([
    mojaFunkcja(),
]).then(() => off());

(choć osobiście polecam korzystać z Async/Await :P)

komentarz 25 lipca 2019 przez jacewojtek Nowicjusz (170 p.)

Coś nie bardzo rozumiem. Moją funkcję wywołuje przez onClick na button i funkcja w uproszzeniu wygląda teraz tak:

 

function mojaFunkcja()
{
	onOverlay();
	var arrLen = $('input').length;
	var arrLenCh = $('input:checked').length;
	var count = 0;
	for(i = 0; i < arrLen ; i++)
	{
		new Promise(() => 
                {
		if($('#id_'+i).is(':checked'))
		{
			$.ajax({
			},
			complete: function(){
			}})			
			.done(function(res)
			{
			})
			.fail(function() {
			});	
		}
		});


	}
}	

to teraz w, którym momencie powinienem wywolać 

Promise.all([mojaFunckja(),]).then(() => off());

przy onClicku czy po prostu gdziekolwiek w kodzie?

Bo póki co nie chce przerwać overlaya w żaden sposób

komentarz 25 lipca 2019 przez Kamil Łydka Stary wyjadacz (13,600 p.)
async function mojaFunkcja()
{
    onOverlay();
    var arrLen = $('input').length;
    var arrLenCh = $('input:checked').length;
    var count = 0;
    for(i = 0; i < arrLen ; i++)
    {

        if($('#id_'+i).is(':checked'))
        {
            await $.ajax({
            },
            complete: function(){
            }})         
            .done(function(res)
            {
            })
            .fail(function() {
            }); 
        }
  
    }
}   
mojaFunkcja().then(() => off());

Pewnie jakoś tak, ale nie obiecuję. 

 

przy onClicku czy po prostu gdziekolwiek w kodzie?

no tam gdzie chcesz to wywołać. 

komentarz 25 lipca 2019 przez adrian17 Ekspert (344,860 p.)

też nie, jeśli chcesz żeby wszystkie zapytania były na raz.

    for(i = 0; i < arrLen ; i++)
    {
        new Promise(() => {...});
    }

Dość blisko, ale chodzi o to, żeby ten Promise teraz wrzucić do jednej tablicy i na tablicy ze wszystkimi promise'ami wywołać Promise.all().

komentarz 25 lipca 2019 przez jacewojtek Nowicjusz (170 p.)
Wielkie dzięki, działa :)

Podobne pytania

0 głosów
0 odpowiedzi 323 wizyt
pytanie zadane 5 marca 2022 w JavaScript przez Us Użytkownik (880 p.)
0 głosów
1 odpowiedź 337 wizyt
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 19 czerwca 2023 w JavaScript przez pj-1024 Użytkownik (670 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 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!

...