Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dziwna kolejność wykonywania akcji
JoShiMa
post
Post #1





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
JoShiMa
post
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
ano
post
Post #4





Grupa: Zarejestrowani
Postów: 435
Pomógł: 40
Dołączył: 16.02.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.


--------------------
Linkedin | ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 01:37