Partage
  • Partager sur Facebook
  • Partager sur Twitter

JS en pause en attendant une réponse AJAX

Sujet résolu
    5 août 2020 à 15:46:51

    Bonjour, je cherche à exécuter une poursuite de codde JS après ma réponse AJAX mais je ne sais pas exactement comment faire malgré les méthodes then que je trouve sur des forums. 

    Je voudrais que le code se mette en pause tant que $.ajax n'a pas fait un retour au front si possible. Vu que cela est dans une boucle ça peut poser problème ?

    let deliveryAddress = document.querySelectorAll('input[name=deliveryAddress]');
        let idDeliveryAddressChecked = -1;
        for (let i = 0; i < deliveryAddress.length; i++) {
            if (deliveryAddress[i].checked) {
                console.log(deliveryAddress[i].id.split('delivery-address-')[1]);
                $.ajax({
                    url: '../../api/Shop.php',
                    type: 'POST',
                    data: { action: 'verifyDeliveryAddress', 
                            userId: userId,
                            deliveryAddress: deliveryAddress[i].id.split('delivery-address-')[1]
                    },
                    success: function (data) {
                        if (data['status'] === 'success') {
                            idDeliveryAddressChecked = data['idDeliveryAddress'];
                        } else if (data['code'] === 404) {
                            window.alert('Merci de ne pas toucher au code source');
                            idDeliveryAddressChecked = 0;
                        } 
                        //console.log(JSON.stringify(data, null, 2));
                    },
                    error: function (data) {
                        window.alert('Une erreur est survenue');
                        //console.log(JSON.stringify(data, null, 2));
                    }
                });
                if (idDeliveryAddressChecked != -1) {
                    break;
                }
            }
        }



    • Partager sur Facebook
    • Partager sur Twitter

    Le dev web est outil de création illimité.

      5 août 2020 à 18:33:44

      Salut,

      Tu dois pouvoir t'en sortir en utilisant async :

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function

      En mettant ton appel $.ajax dans une fonction à part et le for dans le code de la function async tu peux appeler autant de fois que tu veux l'appel ajax, tout en attendant à chaque fois le résultat (si c'est bien ce que tu veux) :

      function resolveAfter2Seconds(x) {
        console.log('resolveAfter2Seconds')
        return new Promise(resolve => {
          setTimeout(() => {
            resolve(x);
          }, 2000);
        });
      };
      
      
      const add = async function(x) { // async function expression assigned to a variable
        let res = 0;
        for (let i = 0; i < x; i++) {
          console.log('i : ' + i);
          res += await resolveAfter2Seconds(20);
        }
        return res;
      };
      
      add(10).then(v => {
        console.log(v);  // affiche 100.
      });
      



      • Partager sur Facebook
      • Partager sur Twitter
        5 août 2020 à 19:32:09


        Ok merci je vais regarder ça, je suis passé via Promise en attendant, mais quand tu définis une fonction asynchrone avec await ça doit bien faire ce que je veux :). Je vais tester 

        Le résultat est tombé et ça fonctionne bien merci :)


        FredLass a écrit:

        Salut,

        Tu dois pouvoir t'en sortir en utilisant async :

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function

        En mettant ton appel $.ajax dans une fonction à part et le for dans le code de la function async tu peux appeler autant de fois que tu veux l'appel ajax, tout en attendant à chaque fois le résultat (si c'est bien ce que tu veux) :

        function resolveAfter2Seconds(x) {
          console.log('resolveAfter2Seconds')
          return new Promise(resolve => {
            setTimeout(() => {
              resolve(x);
            }, 2000);
          });
        };
        
        
        const add = async function(x) { // async function expression assigned to a variable
          let res = 0;
          for (let i = 0; i < x; i++) {
            console.log('i : ' + i);
            res += await resolveAfter2Seconds(20);
          }
          return res;
        };
        
        add(10).then(v => {
          console.log(v);  // affiche 100.
        });
        





        -
        Edité par ApoSkunz 5 août 2020 à 23:33:46

        • Partager sur Facebook
        • Partager sur Twitter

        Le dev web est outil de création illimité.

        JS en pause en attendant une réponse AJAX

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown