Bonjour,

Je ne sais pas trop où poster mon problème car il touche à plusieurs langages. Je crois que c'est ici qu'il est le plus approprié de le faire. Ainsi voici mon problème.

Je développe une application Web où l'affiche un formulaire qui permet la modification de caractéristiques pour un produit. L'événement onUnload appelle la fonction save_final() qui elle fait une validation puis appelle save_produit(), une fonction qui appelle en AJAX une page qui fait un UPDATE dans ma base de données. Mon problème est que, bien que la requête UPDATE s'effectue correctement, l'information affichée dans la page suivante n,apparaît pas à jour à moins que je rafraîchisse la page. Comme si l'UPDATE n'avait pas le temps de se terminer avant l'exécution du SELECT sur la page suivante.

Voici le code javascript qui gère mon enregistrement avant le chargement de ma page.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
  function save_final() {
    if(document.forms['mod_produit'].unsaved.value > 0) {
      var msg = "Souhaitez-vous enregistrer les modifications?\n\nCliquez sur OK pour enregistrer les modifications\nCliquez sur ANNULER pour quitter sans enregstrer";
      if(confirm(msg)) {
        save_produit("all");
        alert("Enregistrement terminé");
      }
    }
  }
 
  function save_produit(obj) {
    //AJAX
    xmlHttp=GetXmlHttpObject();
    if(xmlHttp==null) {
      alert("Browser does not support HTTP Request")
      return
    }
    var id_produit = document.forms['mod_produit'].id_produit.value;
 
    if(obj == "all") {
      var frm = document.forms['mod_produit'];
      var cible = "produits.php?action=modifier&all="+id_produit;
      cible += "&code_produit="+escape(frm.code_produit.value);
      [...]
      xmlHttp.open("GET",cible,false); //change to true for asynchronous
      xmlHttp.send(null);
    }
    else {
      //Gestion par objet
    }
    return true;
  }
Si je n'affiche pas le message "Enregistrement terminé" après l'appel à ma fonction save_produit, les appels faits dans cette dernière n'ont pas le temps de s'exécuter et l'enregistrement des données ne se fait pas.

L'appel de ma page PHP pour l'update se fait bien, que je le fasse en AJAX ou tout simplement à travers un iframe caché, c'est pourquoi je n'ai pas posté ce problème dans le forum AJAX. Je me demande tout simplement pourquoi mon message "Enregistrement terminé" apparaît toujours instantanément et pourquoi, même si j'attends 2 minutes avant d'appuyer sur OK, la page suivante n'est pas capable de m'afficher du premier coup les informations à jour même si tout s'est bien enregistré.