Volgorde functies uitvoeren in ajax/jquery

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

A elb

A elb

29/12/2016 12:09:43
Quote Anchor link
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


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
Gewijzigd op 29/12/2016 14:20:01 door A elb
 
PHP hulp

PHP hulp

17/11/2024 00:42:59
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 12:17:06
Quote Anchor link
Zou je jouw code tussen code-tags willen plaatsen? Dan is het beter leesbaarder.

Zie ook de Meest Gestelde Vragen op de site.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/12/2016 12:18:40
Quote Anchor link
en wat zit er in de functies saveAdress en loadConfirm?
 
A elb

A elb

29/12/2016 14:30:29
Quote Anchor link
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 :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
functie1();
functie2();
$ajax.....
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/12/2016 14:41:34
Quote Anchor link
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.
 
A elb

A elb

29/12/2016 14:49:31
Quote Anchor link
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
 
- SanThe -

- SanThe -

29/12/2016 15:05:24
Quote Anchor link
Laat de functies een true returnen als ze klaar zijn.
Dan kan je dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if(functie1 == true && functie 2 == true)
{
   ajaxrequest;
}
Gewijzigd op 29/12/2016 15:05:46 door - SanThe -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/12/2016 15:12:49
Quote Anchor link
Of zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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; ?>';
        }
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2016 15:18:23
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/12/2016 15:22:55
Quote Anchor link
>> 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
 
A elb

A elb

29/12/2016 15:35:09
Quote Anchor link
Top bedankt voor de tips heren. Ik denk dat zo wel verder kan
Ik wens iedereen alvast een fijne jaarwisseling
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2016 16:05:45
Quote Anchor link
>> 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 :).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.