Synchroniser javascript, ajax, requête sql php
Salut tout le forum,
J’ai besoin de votre aide.
dans un de mes projets j'ai un problème de synchronisation avec une boucle for et le lancement d'une fonction suivant le résultat de la boucle for
Le code javascript
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| $(document).ready(function () {
$("#formulaire").submit(function () {
if (document.getElementById("exerciceTermine").value == "Non" && verifierSiComplet() != 1) {
document.getElementById("nbreTentative").value++;
var nbreErreur = 0;
for (let i = 1; i <= 3; i++) {
var reponse = $('#' + i + '').val();
$.post('../page/comparer.php', { reponse: reponse, i:i }, function (donnees) {
if (donnees == 0) {
nbreErreur = 1;
document.getElementById(i).className = "mauvaiseReponse";
document.getElementById("evaluation").value = Number(document.getElementById("evaluation").value) - 0.5;
} else if (donnees == 1) {
document.getElementById(i).className = "bonneReponse";
}
})
}
if (nbreErreur == 0) {
document.getElementById("exerciceTermine").value = "Oui";
enregistrerEvaluation();
}
}
return false;
})
});
function verifierSiComplet() {
for (var i = 1; i <= 3; i++){
if (document.getElementById(i).value == "") {
alert("Impossible de corriger, il manque au moins une réponse.");
return 1;
}
}
}
function enregistrerEvaluation() {
var nbreTentative = $("#nbreTentative").val();
var evaluation = $("#evaluation").val();
$.post('../page/envoyer.php', { nbreTentative: nbreTentative, evaluation: evaluation }, function () { })
} |
La page comparer.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php
if(isset($_POST['reponse']) && !empty($_POST['reponse'])) {
include("/var/www/connexionBddIntervention.php");
$chReponse = $bddIntervention->prepare('SELECT reponse FROM reponses');
$chReponse->execute();
$reponse = $chReponse->fetch();
$reponses = unserialize($reponse['reponse']);
$chReponse->closeCursor();
$emplacement = $_POST['i'] - 1;
if($_POST['reponse'] != $reponses[$emplacement]){
echo 0;
}else{
echo 1;
}
}
?> |
La page envoyer.php
Code:
1 2 3 4 5 6 7 8 9 10 11
| <?php
if(isset($_POST['nbreTentative'],$_POST['evaluation']) && !empty($_POST['nbreTentative']) && !empty($_POST['evaluation'])){
include("/var/www/connexionBddIntervention.php");
$in = $bddIntervention->prepare("INSERT INTO candidatReponses (nbrTentatives, nbrPoints) VALUES(:nbrTentatives, :nbrPoints)");
$in->bindValue('nbrTentatives', $_POST['nbreTentative'], PDO::PARAM_INT);
$in->bindValue('nbrPoints', $_POST['evaluation'], PDO::PARAM_INT);
$in->execute();
$in->closeCursor();
}
?> |
A la soumission du formulaire le if (nbreErreur == 0) {} est franchi immédiatement avant la fin de la boucle for
Code:
1 2 3 4
| if (nbreErreur == 0) {
document.getElementById("exerciceTermine").value = "Oui";
enregistrerEvaluation();
} |
Comment faire pour que cette condition ne soit franchie qu'une fois la boucle for terminée.
Merci pour votre aide.