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 :

eval de json en retour d'ajax sous IE


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut eval de json en retour d'ajax sous IE
    Bonjour a toutes et a tous

    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 stUpdate() {
    
    	var flag = 0;
    	xhr2 = getXMLHttpRequest();
    	
    	
    	xhr2.onreadystatechange = function() {
    		
    	 	if (xhr2.readyState == 4) {
    			var data;
    			eval(xhr2.responseText);
                            // code omis pour lisibilite //
    	}
    	xhr2.open("POST", "inc/batch_update.php", true);
    	xhr2.send(null);
    };
    Cette ligne ne marche pas sous IE 8, elle marche sous Chrome sous Firefox sans probleme mais IE me renvoit cette erreur pour la ligne cite au dessus

    Message: Expected identifier, string or number
    Code: 0
    La valeur que l'eval essaie d'interprete est bien la bonne et comprend ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = {time: '2010-02-03 11:53:16',idtime: '63',speed: '1',end: '2010-02-03 12:02:00',pid: '1112',statut: 'EC',progress: '12',};

    Je recupere ensuite les infos avec data.xxxx data.yyyy, tout ceci fontionne sans probleme sur FF et Chrome mais pas sous IE 8.
    Je recois bien les bonnes informations mais l'eval plante sous IE, dois je utiliser une autre fonction pour ce browser ?

    Merci d'avance, j'ai scrute pas mal de forums et google sans trouver vraiment de reponse tangibles.

  2. #2
    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
    il me semble que la syntaxe d'un eval de json en retour d'ajax comporte des quotes et parenthèses...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('(' + xhr2.responseText + ')');
    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 !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut
    J'avais deja essaye de cette maniere mais j'ai toujours la meme erreur.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Par défaut
    Bonjour,

    Il faut faire du JSON valide quitte à faire

    devient
    sans virgule.

    (Je passe sur le fait que le JSON demande des guillemets, et non des apostrophes !)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut
    Merci a vous 2 pour ces reponses rapide, le probleme semble venir de la virgule en trop.

    Etrange cependant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('(' + xhr2.responseText + ')');
    ne fonctionne pas mais la version sans quote et parentheses elle fonctionne.


    Etrange aussi que tout marche sous FF et Chrome ;/

    Raaa le dev web...

    Merci a tous

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Par défaut
    De rien

    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('(' + xhr2.responseText + ')');
    qui ne marche pas, c'est assez normal : tu lui demandes d'évaluer "(data = {...}".
    Il voit un point-virgule (= fin de commande) avant la parenthèse fermante --> problème.

    Normalement, pour faire cela de façon "propre", il faudrait renvoyer par Ajax que du JSON, soit "{...}" (sans variable, sans point-virgule).
    l'éval devient alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('data = (' + xhr.responseText + ');');

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut
    @JulienC

    Merci pour ses precisions, j'en prend bonne note

  8. #8
    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
    heu plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = eval('(' + xhr.responseText + ');');
    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 !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Bonjour JulienC

    je rebondis sur ta réponse :
    N'est ce pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('{' + xhr2.responseText + '}');
    où les {} remplaceraient celles de
    J'avoue que j'ai le même soucis et que je ne trouve pas la solution !

    Merci d'avance.

  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
    Non je confirme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('(' + xhr2.responseText + ')');
    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 !

  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 : 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
    Depuis, on est passé à
    avec éventuellement le eval() en fallback pour IE < 8
    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 Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    On a cette ligne de code "multi-navigateurs" que l'on trouve un peu partout sur le net...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = (typeof JSON!=='undefined') ? JSON.parse(txt) : eval('('+txt+')');
    qui n'utilise la fonction eval() quand l'absence de l'obet JSON ( IE < 8 ).

  13. #13
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    [TROLL]
    bande de détraqueur d'IE !!

    Le JSON.parse est apparu sur

    IE 8 en 2008
    FIREFOX 3.5 en 2009
    [/TROLL]

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Merci à tous !

    Je vais essayer de réparer ça ! :-)

    Citation Envoyé par Eric2a Voir le message
    Salut,

    On a cette ligne de code "multi-navigateurs" que l'on trouve un peu partout sur le net...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = (typeof JSON!=='undefined') ? JSON.parse(txt) : eval('('+txt+')');
    qui n'utilise la fonction eval() quand l'absence de l'obet JSON ( IE < 8 ).

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Non je confirme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('(' + xhr2.responseText + ')');
    Et quelles sont les contraintes sur le JSON récupéré en caractères ?
    Juste qu'il soit valide ?

  16. #16
    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
    que le string json soit correctement formatté
    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 !

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 31
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    que le string json soit correctement formatté
    Un vieil echo dans un fichier include m'a fait perdre un bon paquet de temps....merci à vous quand même !

  18. #18
    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
    coté serveur en php un bon vieux json_encode sur un array t'evitera bein des soucis de format du string json
    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. [MySQL] retour du résultat sous forme json avec php
    Par franco9 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2012, 15h53
  2. [AJAX] AJAX sous IE et FF
    Par Zarx dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/08/2007, 13h24
  3. [AJAX] Div dynamique AJAX. Sous IE, les images ne s'affichent pas
    Par N3odyme dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/12/2006, 20h56
  4. Encoder les retours chariots comme sous Unix
    Par tsing dans le forum Langage
    Réponses: 5
    Dernier message: 07/03/2006, 19h48
  5. Code retour SQL server sous centura
    Par MorbidAngel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/09/2005, 14h07

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