Volgorde functies uitvoeren in ajax/jquery
Beste Leden,
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
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
Zou je jouw code tussen code-tags willen plaatsen? Dan is het beter leesbaarder.
Zie ook de Meest Gestelde Vragen op de site.
Zie ook de Meest Gestelde Vragen op de site.
en wat zit er in de functies saveAdress en loadConfirm?
Het gaat dus puur om de volgorde van het uitvoeren van de functies.
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 :)
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.
Precies het loopt asynchroon. functie1 en functie2 hebben nou eenmaal meer opdrachten om uit te voeren.
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
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
Laat de functies een true returnen als ze klaar zijn.
Dan kan je dit doen:
Dan kan je dit doen:
Gewijzigd op 29/12/2016 15:05:46 door - SanThe -
Of zo
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; ?>';
}
Wat @Frank voorstelt lijkt mij de enige verantwoorde wijze. De functie is pas "klaar" als deze zelf aangeeft klaar te zijn: in het callback-gedeelte van de functie (het onderdeel "success").
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.
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.
>> Functies zijn pas nuttig als je deze meerdere keren gebruikt / kunt gebruiken.
Ze kunnen ook de leesbaarheid van je code vergroten.
Ze kunnen ook de leesbaarheid van je code vergroten.
Gewijzigd op 29/12/2016 15:23:13 door Frank Nietbelangrijk
Top bedankt voor de tips heren. Ik denk dat zo wel verder kan
Ik wens iedereen alvast een fijne jaarwisseling
Ik wens iedereen alvast een fijne jaarwisseling
>> Ze kunnen ook de leesbaarheid van je code vergroten.
Dat is waar, maar je zou dit ook via annotatie kunnen regelen, je hoeft hiervoor geen aparte functie te declareren :).
Dat is waar, maar je zou dit ook via annotatie kunnen regelen, je hoeft hiervoor geen aparte functie te declareren :).




