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 :

[AJAX] Div modifié par Ajax ne s'affiche qu'une seconde


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut [AJAX] Div modifié par Ajax ne s'affiche qu'une seconde
    Bonjour à tous,

    J'ai un souci d'affichage.
    Ma page contient plusieurs div : liste des utilisateurs, ajouter un utilisateur et modifier un utilisateur.
    Au départ s'affiche la liste des utilisateurs. Si je veux en ajouter un, tout fonctionne, la liste des utilisateurs disparaît et un formulaire d'ajout s'affiche.
    Par contre lorsque je veux modifier un utilisateur, un formulaire semblable devrait s'afficher et la liste des utilisateurs disparaître. Or ce formulaire ne s'affiche qu'une fraction de seconde et la page se recharge avec la liste des utilisateurs. Une idée d'où vient le problème ??

    Code de la fonction javascript appelée lorsqu'on veut modifier un utilisateur :
    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
     
    function modifyUser(commercial, agence) {
    	var xhr = getXhr();
    	xhr.onreadystatechange = function(){
    		if(xhr.readyState == 4 && xhr.status == 200){
    			answer = xhr.responseText ;
    			document.getElementById('modifieruser').style.display = "block" ;
    			document.getElementById('modifieruser').innerHTML = answer ;
    			document.getElementById('users').style.display = "none" ;
    			document.getElementById('ajouteruser').style.display = "none" ;
    		}
    	}
    	xhr.open("POST","ajaxUsers.php",true);    
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');     
    	xhr.send("action=1&idcommercial="+commercial+"&idagence="+agence);
    }
    Je précise que j'ai la bonne réponse du fichier ajaxUsers.php et que ma fonction getXhr fonctionne également.

    Merci à ceux qui prendront le temps de me lire !

  2. #2
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    tu ne ferais pas la requete qui permet d'afficher la liste des utilisateur juste apres l'autre par hasard ?

    sinon installe l'extension Firebug pour Firefox
    ça permet de voir passer les requete Ajax.

    tu trouvera peut etre d'ou viens le probleme

  3. #3
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    Merci pour ta réponse (super rapide !).
    Voici l'ordre que j'ai :
    d'abord les fonctions javascript :
    newUser
    getXhr
    modifyUser
    existing
    ensuite les fonctions php de traitement des formulaires
    ensuite la page html

    Je n'ai pas l'impression que l'ordre ne soit pas le bon mais je peux me tromper.

    Pour l'instant, la liste des utilisateurs s'affiche via la page html de base. Est-ce qu'il faut que je fasse un body onload et que je fasse s'afficher cette liste via ajax ?

    Pour le debug de Firefox, je vais essayer, merci pour l'info.

  4. #4
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    si la liste des utilisateur ne s'affiche que au chargement de la page, c'est pas une question d'ordre (enfin je pense pas)
    le formulaire s'affiche dans le div a la place de la liste ? ou bien ce sont 2 div different ?
    parce que là je voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    document.getElementById('modifieruser').style.display = "block" ;
    document.getElementById('modifieruser').innerHTML = answer ;
    document.getElementById('users').style.display = "none" ;
    document.getElementById('ajouteruser').style.display = "none" ;
    modifieruser et users c'est quoi ?

  5. #5
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    users et modifieruser sont les id des div correspondants respectivement à la liste des utilisateurs et au formulaire de modification (celui qui ne s'affiche q'une seconde...)
    j'ai <div id='users'>... liste des utilisateurs ... </div>
    et en-dessous <div id='modifieruser'>...vide au démarrage, formulaire si l'utilisateur a cliqué sur le bouton de modification ... </div>

  6. #6
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    et tu as ce probleme avec IE et FF ? ou seulement IE ?

  7. #7
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    Sous IE : le formulaire ne s'affiche qu'une fraction de seconde puis la page a l'air d'être rechargée.
    Sous Firefox : le formulaire ne s'affiche même pas...

    J'ai installé l'extension de debug dont tu m'as donné le lien, je suis en train de regarder ça.

  8. #8
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    c'est assez bizarre comme truc
    dans firebug dans les option coche "showXMLHttpRequest" comme ça tu verra passer tes requetes ajax, et meme leurs resultats

    ça aide vachement pour debuguer

  9. #9
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    J'ai 3 erreurs selon les moments. Est-ce que tu saurais comment conserver l'affichage de l'erreur ? J'ai eu du mal à prendre la première qui apparaît et disparaît aussitôt.

    Erreur 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    POST http://www.foximmo.co.uk/admin/ajaxUsers.php (94 ms)users.php (ligne 69)
    [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://www.foximmo.co.uk/admin/users.php :: anonymous :: line 56" data: no]
    ligne 69 : xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ligne 56 : xhr.onreadystatechange = function(){

    Erreur 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    document.getElementById("users") has no properties
    onreadystatechange()users.php (ligne 58)
    [Break on this error] document.getElementById('users').style.display = "none" ;
    ligne 58 : answer = xhr.responseText ;

    Erreur 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    modifyUser is not defined
    J'avoue que j'ai du mal à décrypter ces messages d'erreurs... Je pense que c'est la première qui est à l'origine du bug, puisqu'elle ne s'affiche qu'une fraction de seconde.
    Pour l'erreur 1, je nage complètement.
    Pour la 2, je ne comprends pas, quelles properties est supposé avoir un div ??
    Pour la 3, il me semble pourtant que modifyUser est bien définie...

  10. #10
    Membre du Club
    Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Mai 2005
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Ta fonction me semble ok.

    Par contre je ne sais pas comment elle est lancée. Peut-être lances-tu deux requêtes à la suite...

    -- EDIT --
    J'avais pas vu les réponses... C'est un forum les gars, pas un chat !! MDR

    Pourquoi n'utilises tu pas un script déjà tout fait qui exécute des "Va chercher et remplace !" en Ajax du type : http://script.aculo.us/

    Il dispose d'une fonction Ajax.Updater(); Trés pratique. Fonctionnel sous tous les navigateurs...

  11. #11
    Membre habitué Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Points : 136
    Points
    136
    Par défaut
    J'ai résolu le problème, mais c'est très étrange, si vous avez une explication à me donner je veux bien ça peut toujours servir.
    J'ai changé mon <input type='submit' ... onclick='modifyUser(...)'>
    en
    <button ... onclick='modifyUser(...)'>Modifier</button>
    et ça fonctionne !!!
    Je n'y comprends rien...

  12. #12
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    je me méfie des type="submit", ça fait toujours des trucs inattendus
    je pense que ça soumettais automatiquement ton formulaire

  13. #13
    Membre du Club
    Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Mai 2005
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    oui, effectivement, ça exécute le script dans le onclick, puis ça soumet le formulaire (normal pour un submit). Tu peux essayer onclick="fonctionjavascript(); return false;". A priori, il mne devrait pas soumettre... Mais ça reste à vérifier...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Relancer jQuery dans un <Div> appelé par AJAX ?
    Par 88mons dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/01/2013, 18h24
  2. Rendre "droppable" une div généré par Ajax
    Par Freeluvs dans le forum jQuery
    Réponses: 1
    Dernier message: 18/03/2011, 08h55
  3. Réponses: 3
    Dernier message: 11/05/2010, 05h16
  4. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  5. [AJAX] Affichage de requête PHP dans un div créé par Ajax
    Par will89 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2007, 19h00

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