Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwna kolejność wykonywania akcji
Forum PHP.pl > Forum > XML, AJAX > AJAX
JoShiMa
Mam z grubsza taki kod w JS:

  1. blnCheck = Funkcja1
  2.  
  3. if(blnCheck ) {
  4. //jakies obliczenia
  5. Funkcja2
  6. }


Zarówno w Funkcja1 jak i Funkcja2 używam ajaksa poprzez wywołanie:

  1. jQuery.post('link_do _kontrolera',dane...


W obu funkcjach są to inne kontrolery.

I teraz zadziwiająca rzecz. Przynajmniej dla mnie zadziwiająca. Najpierw wykonuje się zapytanie z Funkcja2 a dopiero potem z Funkcja1. Co robię źle?
Sephirus
Kwestia jest taka że te "funkjce" idą równolegle - to dlatego że zapytanie ajax jest asynchroniczne zatem nie czeka na odpowiedź i idzie dalej.

Aby to poprawić musisz uczynić te ajaxy synchroniczne lub inaczej to zorganizować smile.gif
JoShiMa
Cytat(Sephirus @ 5.06.2012, 11:34:14 ) *
Aby to poprawić musisz uczynić te ajaxy synchroniczne lub inaczej to zorganizować smile.gif

A podpowiesz coś więcej? Na ogół sama dociekam szukając po sieci, ale z noworodkiem u boku i jedną wolną ręką marnie mi idzie wink.gif


Dobra, już znalazłam:

  1. jQuery.ajaxSetup({async:false});


W każdym razie dzięki za olśnienie.
ano
To rozwiazanie jest słabe bo wszystkie ajaxowe requesty będą Ci szły synchronicznie, co nie jest OK.
Najlepiej dla tych dwóch requestów, które potrzebujesz zsynchronizować użyć Deffered Object.
Przykładowy kod, którego kiedyś używałem:
Kod
// using deferred object
var mySynchRequest = function() {
    var dfd = new jQuery.Deferred();
    
    $.post("url", queryData,
        function(data){
            if(data == undefined) {
                dfd.resolve(false);
            }
            else {
                dfd.resolve(true);
            }
        }, "json");
        
    return dfd.promise();
}


dfd.promise() zwróci to, co było argumentem dfd.resolve().
Czyli np. dla poprawnego requestu zwróciłoby tam true.

albo np.
dfd.resolve("test");
return dfd.promise(); // => test

i ta funkcja mySynchRequest będzie synchroniczna.
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.