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] Traitement de ResponseText Ajax


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut [AJAX] Traitement de ResponseText Ajax
    Bonjour,

    j'ai une fonction ci-dessous en Ajax

    après quelques tests, il apparait que le responseText n'est pas bien traité ; en fait je veux retourner un tableau que je traite ensuite

    ou se trouve mon erreur ??



    function get_select(table)
    {

    //Objet XMLHTTPRequest
    var XHRS = null;

    //Si l'objet existe déjà on abandonne la requête et on le supprime
    if(XHRS && XHRS.readyState != 0)
    {XHRS.abort();
    delete XHRS;}

    //Création de l'objet XMLHTTPRequest
    XHRS = getXMLHTTP();
    if(!XHRS)
    {return false;}

    XHRS.open("GET", "get_select.php?table=" + escape(table) + ieTrick(), true);

    //Recuperation du resultat
    XHRS.onreadystatechange = function()
    {
    //Si le chargement est terminé
    if (XHRS.readyState == 4)
    {
    tableselect = XHRS.responseText.split(" ");
    }
    }

    tableselect = XHRS.responseText.split(" ");
    XHRS.send(null);

    return tableselect;
    } // fin get_select

    et voici le script get_select à tout hasard qui est censé retourner un tableau

    <?php
    include("includes/connect_mysql.php");
    $dblink=connect_mysql();

    $query=mysql_query("SELECT * FROM media_biblio_genre ORDER BY Genre ASC",$dblink);
    $nb=mysql_num_rows($query);
    for ($i=0;$i<$nb;$i++)
    {
    $ptr=mysql_data_seek($query,$i);
    $genre=mysql_fetch_array($query);
    $table_genre[$i]=$genre['Genre'];
    }

    mysql_close();

    echo $table_genre;
    ?>

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ton php renvoie un tableau, mais du coté javascript, le XHRS.responseText, c'est une chaine de caractère, pas un tableau. Ton erreur vient de la.

    Pour renvoyer des données de façon ordonnée, tu as a ta disposition soit le JSON, soit le XML.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Bonsoir, tout le monde.
    Il y un une autre solution si tu ne veux pas t'emmerder à essayer de lire une réponse au format xml ou json c'est de formater les donnés du côté serveur, donc au lieu d'afficher un tableau comme tu essayais de faire(ce qui est je crois impossible) tu peux afficher les données par un echo selon le format que tu veux qu'ils soient affichés dans ta page html.
    Ex:
    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
     
    <?php
    include("includes/connect_mysql.php");
    $dblink=connect_mysql();
     
    $query=mysql_query("SELECT * FROM media_biblio_genre ORDER BY Genre ASC",$dblink);
    $nb=mysql_num_rows($query);
    for ($i=0;$i<$nb;$i++)
    {
    $ptr=mysql_data_seek($query,$i);
    $genre=mysql_fetch_array($query);
    $table_genre[$i]=$genre['Genre'];
    }
     
    mysql_close();
    echo '<ul>';
    foreach($table_genre as $genre )
    {
    echo '<li>'.$genre.'</li>';
    }
    echo '</ul>';
    ?>
    Peut être que ce n'est pas la meilleurs méthode mais en tout cas moi je l'utilise et ça me convient pour le moment.

  4. #4
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonsoir !

    Citation Envoyé par othmane126 Voir le message
    donc au lieu d'afficher un tableau comme tu essayais de faire(ce qui est je crois impossible)
    Mais si c'est possible ! Ca va t'afficher ... 'Array'

    Disons que ( en gros ) 3 possibilités :
    JSON
    XML
    Texte ...

    JSON est très bien géré par Zend Framework, par exemple, donc si tu veux faire ca par JSON, va voir la classe Zend_Json_Encoder, et la fonction _encodeArray( )
    Ca va te retourner un objet JS, sur lequel il faudra que tu fasse un for, bref, c'est la galère
    XML .. Si tu aimes avoir mal à la tête XD
    A c'moment la, faut juste faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( $table_genre As $id => $genre )
      echo '<genre><id>' . $id . '</id><nom>' . $genre . '</nom></genre>';
    Et tu aura une sortie en XML
    donc XHRS.responseXML, puis bonne chance pour traiter ton xml ...
    Texte !
    Le plus simple selon moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( $table_genre As $id => $genre )
      echo $id . '§' . $genre . '<§>';//2 séparateurs arbitraires
    et de l'autre coté en JS, un explode de responseText avec le <§>, puis un second avec le §, et voila, tu as ton id en indice 0, le nom en indice 1 pas propre, mais moins galère !

    Et si jamais tu vois des problèmes d'accent, tu fais des encodages en base64

    Bonne chance !
    ( Et bonne nuit, ;_; )

Discussions similaires

  1. Ajax - traitement serveur
    Par wajdiF dans le forum ASP.NET Ajax
    Réponses: 1
    Dernier message: 04/03/2010, 12h09
  2. [AJAX] eval (transport.responseText) et JSUnit
    Par nicorama dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/04/2008, 11h00
  3. [AJAX] traitement xml problematique
    Par Hellmut dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 10/02/2008, 18h06
  4. [AJAX] Traitement des balises html
    Par Mysti¢ dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/08/2006, 22h07
  5. [AJAX] Utilisation de responseText
    Par manaboko dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/05/2006, 08h33

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