IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[onUnload et MySQL update] Besoin d'un délai d'attente?


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut [onUnload et MySQL update] Besoin d'un délai d'attente?
    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é.
    Pensez à la balise

  2. #2
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Comme je n'étais pas convaincu que le mode Synchrone donnait suffisament de temps pour l'exécution du script PHP, j'ai tenté de faire l'appel de façon Asynchrone et de ralentir le navigateur jusqu'à ce que tout soit terminé. Malgré tout ça et bien que ma boucle ait l'effet escompté, rien ne se passe. Serait-ce dû à un problème du côté MySQL?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    xmlHttp.open("GET",cible,true); //change to true for asynchronous
    xmlHttp.send(null);
    var loop = 0;
    while(xmlHttp.readyState < 4) {
      loop = loop + 1;
    }
    alert(loop);
    Pensez à la balise

Discussions similaires

  1. MySQL - Update et insert Multiple
    Par mastronic dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2006, 09h28
  2. Mysql update supprime un enregistrement
    Par Langly dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/08/2006, 17h46
  3. [MySQL] updater un seul tuple a la fois+increment de la cle
    Par kenny49 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/07/2006, 12h13
  4. [MySQL] update a partir du resultat d'un select
    Par brice01 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 05/04/2006, 22h44
  5. prob. d' incrémentation /mysql UPDATE
    Par K4trix dans le forum Requêtes
    Réponses: 15
    Dernier message: 01/12/2005, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo