Autor | Zpráva | ||
---|---|---|---|
jval Profil |
#1 · Zasláno: 24. 4. 2017, 07:53:48
Zdravím mám funkci
function check_times() { $('.checked').html(''); var nextdays = $('.nextdays_row :checkbox:checked').map(function () { return this.value; }).get(); $('#times :checkbox:checked').each(function () { $.ajax({ type: "GET", url: "ajax.php", data: "action=check_times&time=" + $(this).val() + "&repeats=" + $('#repeats').val() + "&repeat_type=" + $('#repeat_type').val() + "&nextdays=" + nextdays.toString() }).done(function (msg) { $('.checked').append(msg); }); }); } Funkci spouštím při změně checkboxů. Pak ji ale potřebuji spustit ještě při odeslání formu aby se zamezilo tomu, že někdo zaškrtá, pak si dá kafe a mezitím někdo některý čas obsadí. Když ovšem použiji: $('#submit').click(function () { check_times(); if ($('.checked').html().length > 0) { alert('Chyba: některé časy jsou již obsazené'); } else { $('#createform').submit(); } }); Mohu nějak skriptu říct aby na dokončení funce počkal? Děkuji |
||
Alphard Profil |
#2 · Zasláno: 24. 4. 2017, 08:00:09
Metoda ajax() má parametr async, kterým můžete vypnout asynchronní průběh, ale tím zmrazíte prohlížeč i pro jiné akce.
Alternativně můžete formulář odeslat až po úspěšném ověření v callbacku, a v každém případě by mělo následovat ošetření na serveru, kdyby třeba nefungoval javascript. |
||
_es Profil |
jval:
„Tak skript nepočká na dokončení check_times() a form se odešle.“ To nie je pravda, formulár sa odošle až po jej „dokončení“. Problém je v tom, že funkcia v argumente metódy done je zavolaná až po vrátení odpovede zo servera z URL "ajax.php" a to môže aj veľmi dlho potom, čo funkcia check_times skončí. Takže ak „Funkci spouštím při změně checkboxů.“, tak ani v tom prípade nemáš zaručené že 12. riadok prebehne. Musíš jednoducho s tou asynchrónnosťou rátať.
|
||
jval Profil |
#4 · Zasláno: 25. 4. 2017, 06:44:52
Děkuji všem. Zatím to s async funguje, tak uvidíme. Je to jen do interního systému s proškoleným člověkem. Ošetření na straně serveru po odeslání je samozřejmost.
|
||
Časová prodleva: 8 let
|
0