| 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