Volgorde functies uitvoeren in ajax/jquery
Zie code onderaan. saveAddress() moet als eerst uitgevoerd worden en wanneer deze klaar is dan pas mag
loadconfirm uitgevoerd worden. Wanneer beide functies uitgevoerd zijn dan pas mag de ajax request uitgevoerd worden. Kan iemand bij hierbij helpen wat een oplossing zou kunnen zijn?
Alvast bedankt
Gr,
Elb
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript"><!--
$('#button-confirm').on('click', function() {
if (!checkTerms()) { return false; }
saveAddress(); //this one first
loadConfirm(); //then this one after saveAddress has been finished
$.ajax({
type: 'get',
url: 'index.php?route=payment/free_checkout/confirm',
cache: false,
complete: function() {
$('#button-confirm').button('reset');
},
success: function() {
location = '<?php echo $continue; ?>';
}
});
});
//--></script>
$('#button-confirm').on('click', function() {
if (!checkTerms()) { return false; }
saveAddress(); //this one first
loadConfirm(); //then this one after saveAddress has been finished
$.ajax({
type: 'get',
url: 'index.php?route=payment/free_checkout/confirm',
cache: false,
complete: function() {
$('#button-confirm').button('reset');
},
success: function() {
location = '<?php echo $continue; ?>';
}
});
});
//--></script>
Gewijzigd op 29/12/2016 14:20:01 door A elb
Zie ook de Meest Gestelde Vragen op de site.
en wat zit er in de functies saveAdress en loadConfirm?
Voorbeeld: Functie2 mag pas uitgevoerd worden wanneer functie1 klaar is. Als laatst mag ajax request uitgevoerd worden wanneer beide functies klaar zijn.
Dus functie2 is afhankelijk van functie1 en de ajax request is afhankelijk van beide functies. Ik hoop dat ik een beetje duidelijk ben :)
Ze worden gewoon uitgevoerd in de volgorde dat je ze aanroept. Alleen in sommige situaties loopt er nog een script asynchroon naast je javascript. Dit bijvoorbeeld bij een AJAX request het geval. Er wordt niet gewacht op een response maar je script loopt gewoon door. Als het response op een later moment binnen komt dan wordt dit pas afgehandeld. Ook met timers kun je dergelijke situaties creëren.
De AJAX request begint al te lopen waardoor het fout gaat.
De AJAX request kan alleen maar slagen wanneer functie1 en functie2 klaar zijn.
Een timeout heb ik geprobeerd idd en dat werkt maar dat lijkt me niet de optimale oplossing. Iemand suggesties?
Bedankt alvast
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$.ajax({
type: 'get',
url: 'index.php?route=payment/free_checkout/confirm',
cache: false,
complete: function() {
$('#button-confirm').button('reset');
},
success: function() {
nogWatAndereFuncties(); // <--- WACHT OP HET RESPONSE VOORDAT JE DIE ANDERE FUNCTIE(S) AANROEPT
location = '<?php echo $continue; ?>';
}
type: 'get',
url: 'index.php?route=payment/free_checkout/confirm',
cache: false,
complete: function() {
$('#button-confirm').button('reset');
},
success: function() {
nogWatAndereFuncties(); // <--- WACHT OP HET RESPONSE VOORDAT JE DIE ANDERE FUNCTIE(S) AANROEPT
location = '<?php echo $continue; ?>';
}
Het helpt natuurlijk ook als je bij het ontwerp van de functies rekening houdt met hun asynchrone aard. En misschien kun je ze wat generieker maken? Nu roep je ze aan zonder parameters. Wanneer je een functie maar één keer gebruikt is het misschien handiger om de code gewoon uit te schrijven? Functies zijn pas nuttig als je deze meerdere keren gebruikt / kunt gebruiken.
Ze kunnen ook de leesbaarheid van je code vergroten.
Gewijzigd op 29/12/2016 15:23:13 door Frank Nietbelangrijk
Ik wens iedereen alvast een fijne jaarwisseling
Dat is waar, maar je zou dit ook via annotatie kunnen regelen, je hoeft hiervoor geen aparte functie te declareren :).