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

AJAX Discussion :

[AJAX] Traitement de retour d'une requête AJAX


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut [AJAX] Traitement de retour d'une requête AJAX
    Bonsoir,

    J'aimerais quelques petits renseignements sur une méthode à utiliser. Je suis en train de developper une application web dont voici le principe de fonctionnement :

    Je dispose d'un menu, lorsque l'on clique sur un de ses éléments, une requete est envoyé sur une page grace à ajax. C'est là que les choses se complique : Cette page se charge de collecter plusieurs information dans un fichier XML que je dois afficher dans plusieurs div different. C'est là que plusieurs interrogations interviennent :

    Est-il possible d'avoir un tableau exploitable via javascript (pour affiche rles éléments dans different div) sachant que la page en question est en php ?

    Sinon, quel pourrait être les autres manière de faire une tel opération ?

    J'essaye de retourner l'idée dans tous les sens, mais j'avoue faire face à un flou total quand à la solution la mieux adaptée.

    En vous remerciant,
    Salutation.

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonsoir,

    Si j'ai bien compris, tu voudrais que ta page php renvoie une liste d'informations clef / valeur pour mettre "valeur" dans le div référencé par "clef".

    Pas de problème, ton script php devra renvoyer du texte que tu interprétera côté client pour en extraire les clefs/valeurs. Il pourra s'agir de code XML (auquel cas il faudra itérer sur les noeuds pour remplir les divs), de code JSON (auquel cas il faudra juste parcourir les éléments retournés pour remplir les divs).

    Ton script serveur va collecter les données à afficher et va les sérialiser en XML ou JSON (ou autre chose si ça te chante) et le script JS va les désérialiser pour les traiter.

    le plus simple :
    côté PHP tu crées un tableau associatif clef / valeur que tu remplis comme tu veux. Tu renvoies un json_encode() de ce tableau.
    côté JavaScript tu eval() ce texte et tu n'as qu'à boucler sur les éléments du tableau et récupérer clef / valeur. Puis document.getElementById("clef").innerHTML = "valeur";

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Merci poru ta réponse rapide. Cependant, je vais apporter quelques précision pour plus de clarté.

    Si j'ai bien compris, tu voudrais que ta page php renvoie une liste d'informations clef / valeur pour mettre "valeur" dans le div référencé par "clef".
    Le problème qui se pose là, c'est que j'ai plusieurs valeurs à mettre dans plusieurs divs. Par exemple, dans un div, je devrais mettre un titre et une date, qui doivent correspondre, et lors d'un clique sur cette ligne, je dois afficher un texte dans un autre div.

    C'est assez difficile à expliquer comme truc en fait

  4. #4
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Si tu as plusieurs valeurs à renvoyer pour chacun de tes divs, tu devras renvoyer quelque chose comme ça

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [{id:"l'id du div", titre:"le titre du div", date:"la date", contenu:"le contenu de ton div"},
    {id:"l'id du div2", titre:"le titre du div2", date:"la date2", contenu:"le contenu de ton div2"}, 
    ... ]

    Et lors de la réception de cette chaine de caractères, tu l'évalues, puis tu boucles sur chaque élément {id+titre+date+contenu} et tu traites chaque champ comme il se doit.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par khayyam90 Voir le message
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [{id:"l'id du div", titre:"le titre du div", date:"la date", contenu:"le contenu de ton div"},
    {id:"l'id du div2", titre:"le titre du div2", date:"la date2", contenu:"le contenu de ton div2"}, 
    ... ]
    Je ne comprends pas trop à quoi correspond tout ça, ca correspond à une chaine ? ou un tableau ?

    J'suis pas super caller en javascript, j'ai juste des bases pour faire des trucs un 'kikoolol'

  6. #6
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    c'est un tableau sous forme JSON. C'est simple à générer côté PHP et simple à récupérer côté JS.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    C'est bien ce qui m'avait semblé comprendre, je me documente actuellement sur la maniere de créer des tableau au formart json via les éléments que je récupere en php. Cependant, je n'ai jamais été fortiche avec les tableaux, je crois qu'il est temps que je m'y mette serieusement. Je vais continuer de me documenter et chercher des tutoriels la dessus.

    Je vais donc essayer de me débrouiller pour faire quelque chose de fonctionnel ! Si par hasard vous avez des liens vers des tuto expliquant tout ça, je suis preneur, trop d'info vaut mieux que pas assez !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Yo, c'est remoi !

    Bon alors après avoir potassé pas mal de doc, j'me suis tourner vers un tableau multi dimentionel créé en php et j'utilise la fonction json_encode();

    dans la boucle qui récupere les infos j'ai :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $result[$i] = array('titre' => "$titre",'desc' => "$desc",'lien' => "$lien");
    $i++;

    et ensuite :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $arr = json_encode($result);
    return $arr;

    seulement, dans mon traitement de la réponse, il n'y pas moyen de récuperer ce tableau !

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(xhr.readyState == 4 && xhr.status == 200){
     // Code à executer pour traiter la réponse
     var doc = eval('(' + xhr.responseText + ')'); 
     alert(doc);

    J'ai essayé de differente façon, j'ai essayé un alert sur la réponse direct, mais aucun résultat

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $arr = json_encode($result);
    echo $arr;
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Oui, le echo fonctionne, mais le but étant de recuperer ce tableau en réponse à une requete ajax.

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Bootax Voir le message
    Oui, le echo fonctionne, mais le but étant de recuperer ce tableau en réponse à une requete ajax.
    return renvoie le résultat au script PHP, pas au navigateur, c'est pourquoi il faut utiliser echo et pas return !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Ah d'accord, j'ai effectivement une réponse dans mon alert maintenant, mais celle-ci ressemble à [objet Objet],[objet Objet] ainsi de suite, autant de fois qu'il y a d'éléments. Je ne comprend pas comment pas traiter cette réponse

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Oui, c'est normal, le eval a transformé ton responseText en objet JavaScript, donc tu peux accéder directement à ses propriétés, par exemple, d'après l'exemple que tu as montré :
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Bon, en fait, j'ai trouvé, il suffi de précisé ce qu'on veut dans le tableau via

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(doc[id][champ]);

    Seulement, j'ai l'impression que le tableau n'est pas ordonné dans le même sens une fois celui recuperé !

    Par exemple, si j'affiche l'élément n°1 => titre côté serveur, j'obtiens bien le premier élément de mon fichier XML, mais côté client au traitement tu tableau, l'élément N°1 => titre ne correspond plus !

  15. #15
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est une des différences importantes entre un tableau et un objet : un tableau référence des valeurs en fonction de leur indice, un objet en fonction de propriétés (donc de couples nom/valeur), il n'y a donc pas d'ordre dans un objet.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Hmm, d'accord, par conséquant je ne peux donc pas avoir exactement le même résultat des deux côtés. Si je rajoute une clé numéroté par exemple, est-ce qu'il serait possible de pouvoir le trier afin d'avoir un ordonnement correspondant ?

  17. #17
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Tu ne dois pas faire d'hypothèse sur l'ordre des éléments de ton tableau côté JS. Si tu veux pouvoir associer correctement les données du tableau à des éléments de ta page, tu dois rajouter un champs dans chaque élément du tableau pour indiquer à quel élément de ta page on fait référence.
    Tout simplement tu peux rajouter un champ id contenant l'id de ton div à modifier.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Comment se fait-il que lorsque que je parcours mon tableau avec une boucle for, mes éléments passe en temps que "undefined" ?

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i=0;i<tab.length;i++) {

    J'essaye ensuite

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    str += ['i']['desc'];

    ou encore

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    str += ["i"]['desc'];

    ou même

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    str += [i]['desc'];

    mais rien à faire, là, je nage, j'arrive toujours à un résultat undefined :/

    J'ai aussi essayer un boucle comme :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    for (value in tab) {

  19. #19
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Rohalalala.... Mais qu'est ce que j'ai honte... Quelle horreur... Vraiment désolé de pourrir le forum là.. :\

    EDIT : Bon je mets Résolu, mes problème d'ajax et json sont règlé. merci beaucoup pour votre aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2015, 16h31
  2. [Encodage] Retour d'une requête AJAX
    Par regseb dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/10/2013, 14h58
  3. Traitement du pourcentage pour une requète ajax
    Par sebxid dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2010, 10h38
  4. Réponses: 4
    Dernier message: 12/10/2009, 17h51
  5. recupérer un retour d'une requete AJAX
    Par wincroc dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2007, 14h37

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