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

jQuery Discussion :

[jQuery / JSON /PHP] Effectuer une requete et envoyer le resultat en JSON


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [jQuery / JSON /PHP] Effectuer une requete et envoyer le resultat en JSON
    Bonjour

    Je viens ici afin d'avoir quelques éclaircissements sur mon problème (logique, sinon pourquoi poster ? ).
    Je vous le détaille.

    J'ai d'un côté, un script client quasi-full ajax. Il s'agit d'un système d'upload de photos, basé sur Uploadify.
    J'utilise jQuery afin de rajouter des effets graphiques, rendre la navigation plus plaisante...

    Voici ce que fait le script client :
    1. On saisie le(s) photo(s) à envoyer sur le serveur (on peut faire du multiupload) ;
    2. Les photos sont uploadées, renommées (à l'aide de microtime + rand) ;
    3. En parallèle, on enregistre le nom orignal de la photo ainsi que diverses informations dans un BDD ;
    4. On affiche un formulaire pour saisir des tags, infos... pour chaque photo précédemment up (c'est ici que j'ai un soucis)


    Revenons à l'étape 3.
    Ma photo est uploadée, à la fois le fichier (dans une répertoire) et les infos (dans la BDD).
    Je dois alors récupérer dans la BDD tout ce qui vient d'être enregistré. Je lance donc à la fin de l'upload un script PHP (form.php, à l'aide de jQuery.post() ) qui récupère tout ça.
    Je dois ensuite envoyer le résultat à la page cliente (index.php) le résultat de cette récupération.

    Pour ça, j'utilise JSON.
    Voici mon form.php :

    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
     
        $handle = mysql_connect('localhost', 'root', '');
        $db = mysql_select_db('galerie');
     
        $request = "SELECT CONCAT('[',
                    GROUP_CONCAT(
                        CONCAT('{id:',id,''), 
                        CONCAT(',nom:',nom,''),
                        CONCAT(',url:',url,'}')
                        ),
                    ']')
                    AS json
                    FROM media
                    WHERE session='".$_POST['session'];
        $result = mysql_query($request);
        //$tab = mysql_fetch_array($result);
        mysql_close($handle);
     
        echo json_encode($result);    
     
    ?>
    Et la gestion côté client (je ne met que la partie concernée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    jQuery.post("form.php", { session: "<?php echo $session; ?>" },
            function(data){
                alert(data.id); // Test
            }, "json");
    Seulement, le alert() m'indique que data.id est indéfini.
    Et si je ne met que data, j'obtiens false au lieu de la chaine JSON.


    Quelqu'un saurait m'indiquer mon erreur ?
    Merci d'avance !
    Dernière modification par Invité ; 07/10/2009 à 11h17.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    c'est visiblement que JQuery ne sait pas quelle valeur passer à la function anonyme en tant que "data", non ?
    Le fait que tu obtiennes "false" en faisant un est le signe que data est indéfini
    Ce data est censé être connu de JQuery ou c'est toi qui aurait dû le définir ?

    A+

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tout d''abord, merci pour le déplacement du post. Je n'avais pas remarque qu'il y avait une section jQuery.

    C'est un bout de code tiré de la doc officiel de jQuery.
    D'après ce que je comprend, le data correspond à la réponse du script appelé.

    Voici le code de la doc officielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.post("test.php", { func: "getNameAndTime" },
      function(data){
        alert(data.name); // John
        console.log(data.time); //  2pm
      }, "json");
    Donc, logiquement, data devrait contenir la chaine JSON non ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Oui, mais le .name et le .time font référence à des attributs définis dans la chaîne JSon.
    Es-tu sûr de ton retour Ajax ?

    A+

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai testé ma requête dans PhpMyAdmin, elle fonctionne.
    Je pense que le soucis vient du retour de la requête. Peut-être vaut-il mieux que je copie le résultat dans un tableau tout frais, avant de faire l'envoi en JSON ?

    Je vais essayer ça avec une requête simplifiée, parce qu'en effet, là je ne suis pas sûr du tout de mon retour Ajax...

  6. #6
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut,
    A priori, si alert(data) renvoie false, c'est que c'est le résultat de :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo json_encode($result);
    ce qui pourrait signifier que l'encodage JSON n'a pas été possible
    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

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

Discussions similaires

  1. PHP : construire une requete SQL
    Par Commodore dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/07/2006, 08h59
  2. [ Requete ] effectuer une requete avec la valeur d'un combo box
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 28/06/2006, 15h36
  3. [Conception] Comment créer un lien pour effectuer une requete ?
    Par Poutchou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/03/2006, 11h54
  4. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

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