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 :

Tableau Json depuis Ajax


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut Tableau Json depuis Ajax
    Bonjour,

    Je possède un tableau Json à deux colonnes (x et y). A l'aide d'une méthode Ajax je vais executer du code PHP. Je recupère mes données et avec un json_decode je recupère mes valeurs.

    Ensuite deuxième cas, j'envoie mon tableau json sur la meme page mais les données sont modifié, je fais donc:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $resultat = json_encode($tab);
    echo $resultat;

    Ensuite dans mon code js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab = JSON.parse(resultat);
    alert(tab[0].x);
    Et j'ai l'erreur
    "unexcepted token"..


    Un alert(resultat) donne bien : [{"x":"50","y":"50"},{"x":"125","y":"50"}]Pouvez vous m'aider ?

    Merci
    Dernière modification par Bovino ; 14/02/2013 à 21h37. Motif: Merci d'indiquer le langage utilisé ([code=xxx]) !

  2. #2
    Membre extrêmement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Si je fait le test suivant dans mon navigateur ça marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var resultat = '[{"x":"50","y":"50"},{"x":"125","y":"50"}]';
    var tab = JSON.parse(resultat);
    alert(tab[0].x);
    ça me donne bien 50. Il faut bien mettre le json entre quote par contre.
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $resultat = json_encode($tab);
    echo utf8_encode($resultat);

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pourtant après plusieurs test j'ai toujours la même erreur

    Voici mon code Js appelé avec un bouton onClick="load(1)":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function load(id_terrain){
    	$.ajax({
    		type: "POST",
    		url: "script/terrain_script.php",
    		data: {action : 'select', id : id_terrain}, 
    		cache: false,
     
    		success: function(resultat){
    			terrain = JSON.parse(resultat);
    			alert(terrain[0].x);
    		}
    	});
    }
    et mon code PHP:
    Code php : 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
    else if($_POST['action'] == 'select'){
    	if(isset($_POST['id']) and is_numeric($_POST['id'])){
    		$id = $_POST['id'];
     
    		$qry = mysql_query("SELECT x_terrain_detail, y_terrain_detail, rang_terrain_detail
    	                   FROM terrain_detail WHERE id_terrain = $id
    			   ORDER BY rang_terrain_detail") or die (mysql_error());
     
    		if(mysql_num_rows($qry) == 10){
    			$i = 0;
    			while($data = mysql_fetch_assoc($qry)){
    				$tab[$i]['x'] = $data['x_terrain_detail'];
    				$tab[$i]['y'] = $data['y_terrain_detail'];
    				$i++;
    			}
    			$resultat = json_encode($tab);
    		}
    	}
    }

    Merci

    Edit: sekaijin même probleme avec le utf8_encode, mes pages sont encodé en utf8
    Dernière modification par Bovino ; 14/02/2013 à 21h35. Motif: Merci d'indiquer le langage utilisé ([code=xxx]) + réduction d'indentation !

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    si tu utilise chrome ou un navigateur webkit

    ouvre les outils developpeur et sélectionne l'onglet network
    lance ton appel ajax
    dans l'inspecteur tu doit voir passer ton appel
    en le sélectionnat tu peux voir la réponse de ton serveur php
    Request MethodOST
    Status Code:200 OK
    et dans preview tu as le contenu
    c'est lui qui est chargé par ton javascript
    je te conseille aussi pour débogger
    de mettre dans ton code php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $resultat = json_encode($tab);
    echo("/*");
    print_r($tab);
    echo("*/");

    ainsi tu peux voir si ta structure php correspond à ce que tu attends

    A+JYT

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai bien le statut 200 : OK

    et dans le preview:
    [{"x":"50","y":"50"},{"x":"125","y":"50"},{"x":"539","y":"36"},{"x":"558","y":"174"},{"x":"522","y":"290"},{"x":"300","y":"300"},{"x":"125","y":"300"},{"x":"50","y":"300"},{"x":"50","y":"125"},{"x":"50","y":"50"}]

    Je vois vraiment pas d'ou vient ce fichu probleme

  7. #7
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    C'est quoi l'erreur complète ? ça ne peut pas être que unexpected token ?

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Visiblement ça ne vien pas du JSON qui semble conforme à ce que tu attends.

    je pencherais donc pour un problème PHP

    une recommandation de Zend pour les script php est de ne pas mettre le ?> final.
    la raison est simple, tout ce qui n'est pas entre <?php et ?> est envoyé au requéteur.

    si ton script php fini par ?> enlève-le.
    si tu fais des includes fais de même sur tous les fichiers.

    il arrive très souvent en php lorsqu'on mets le ?> qu'un caractère invisible soit mis après le tag de fermeture du script du coup on ne le voit pas et il est envoyé au client.
    avec le navigateur c'est rarement gênant car le moteur HTML soit les ignore soit place le caractère invisible dans la page, et l'interprète javascript considère la plus part de ces caractères comme des witespaces. au pire il fait une erreur et continu.

    mais le Parser JSON est lui plus sensible à ce genre de pb.
    tu peux faire un test à la place de
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    terrain = JSON.parse(resultat);
    mets
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval ('terrain = ' + resultat + ';');
    si ça passe c'est que tu as de forte chance que ce soit un élément caché qui provoque l'erreur.

    enfin petite astuce dans ton php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($data = mysql_fetch_object($qry)){
      $tab[$i]['x'] = intval($data.x_terrain_detail); //tu peux aussi utiliser floatval
      $tab[$i]['y'] = intval($data.y_terrain_detail); //tu peux aussi utiliser floatval
      $i++;
    }
    en JSON ça va te donner [{"x":50,"y":50},{"x":125,"y":50}]. du coup dans terrain[0].x tu obtiens un Number.

    A+JYT

  9. #9
    Invité
    Invité(e)
    Par défaut
    Effectivement avec un encodage utf-8 sans DOM tout est ok

    merci pour ton aide !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    sans BOM, pas DOM
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/01/2013, 09h39
  2. Requête Ajax Tableau Json
    Par sylvain230 dans le forum jQuery
    Réponses: 12
    Dernier message: 19/07/2011, 14h23
  3. Conseil pour remplir un tableau excel depuis USF
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2006, 11h15
  4. tableau word depuis delphi
    Par oliflo dans le forum Delphi
    Réponses: 10
    Dernier message: 11/09/2006, 08h59
  5. Ecrire dans un tableau html depuis une fonction js ?
    Par botanica dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 12h48

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