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:
Zarówno w Funkcja1 jak i Funkcja2 używam ajaksa poprzez wywołanie:
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? -------------------- |
|
|
|
![]() |
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ć -------------------- 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... |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%)
|
Aby to poprawić musisz uczynić te ajaxy synchroniczne lub inaczej to zorganizować 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 Dobra, już znalazłam:
W każdym razie dzięki za olśnienie. -------------------- |
|
|
|
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 | ...
|
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 01:37 |