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




<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>

Zou je jouw code tussen code-tags willen plaatsen? Dan is het beter leesbaarder.

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 :)

functie1();
functie2();
$ajax.....

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
Laat de functies een true returnen als ze klaar zijn.
Dan kan je dit doen:

if(functie1 == true && functie 2 == true)
{
   ajaxrequest;
}
Of zo

    $.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; ?>';
        }
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.
>> Functies zijn pas nuttig als je deze meerdere keren gebruikt / kunt gebruiken.

Ze kunnen ook de leesbaarheid van je code vergroten.
Top bedankt voor de tips heren. Ik denk dat zo wel verder kan
Ik wens iedereen alvast een fijne jaarwisseling

Reageren