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;
}
}
}
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.
});
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
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
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.
Le dev web est outil de création illimité.
Le dev web est outil de création illimité.