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

Bibliothèques & Frameworks Discussion :

Parser du JSON aprés une requête Ajax [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut Parser du JSON aprés une requête Ajax
    Bonjour,
    J'utilise l'api myspace opensearch qui est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://api.myspace.com/opensearch/people?searchTerms='greg'
    Ca retourne bien du json dans ma page, mais lorsque je fais la meme chose en requete Ajax je n'ai rien en réponse...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    url = "http://api.myspace.com/opensearch/people?";
    popup = function(e){alert(e.responseText)};
    new Ajax.Request(url, {
      method:'get',
      parameters:{searchTerms:'celine'},
      onComplete: popup
    });
    Qu'est ce que je fais mal?

    Greg

  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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Ajax te retourne comme son nom l'indique du texte dans le responseText
    il faut le convertir en json


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    url = "http://api.myspace.com/opensearch/people?";
    popup = function(retour){
     myjson=eval("("+Ajax.responseText+")")
     };
    new Ajax.Request(url, {
      method:'get',
      parameters:{searchTerms:'celine'},
      onComplete: popup(Ajax.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 Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Ajax te retourne comme son nom l'indique du texte dans le responseText
    il faut le convertir en json
    J'ai converti comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    url = "http://api.myspace.com/opensearch/people?";
    popup = function(e){alert(e.responseText.evalJSON())};
    new Ajax.Request(url, {
      method:'get',
      parameters:{searchTerms:'celine'},
      onComplete: popup
    });
    Mais de toute facon le responseText est vide alors il n'a rien à convertir
    Dans ton code ou le mien, il n'alert rien.



    [Edit]
    J'ai rajouté ceci, trouvé sur la doc prototype.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    url = "http://api.myspace.com/opensearch/people?";
    popup = function(e){
      alert(e.responseText.evalJSON(true));
    };
    new Ajax.Request(url, {
      method:'get',
      requestHeaders: {Accept: 'application/json'},
      parameters:{searchTerms:'celine'},
      onComplete: popup
    });
    Mais ca ne change rien

    [/edit]

  4. #4
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    sur le oncomplet pourquoi passes tu par e qui n'est pas crossbrowser ?

    lance ta fonction popup en lui passant comme paramètre le responseTExt


    que te retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    new Ajax.Request(url, {
      method:'get',
      requestHeaders: {Accept: 'application/json'},
      parameters:{searchTerms:'celine'},
      onComplete: alert(Ajax.responseText) // ou this.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 !

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sur le oncomplet pourquoi passes tu par e qui n'est pas crossbrowser ?

    lance ta fonction popup en lui passant comme paramètre le responseTExt


    que te retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    new Ajax.Request(url, {
      method:'get',
      requestHeaders: {Accept: 'application/json'},
      parameters:{searchTerms:'celine'},
      onComplete: alert(Ajax.responseText) // ou this.responseText
    });
    Je t'interromps tout de suite, e n'a rien n'a voir avec du crossbrowser, c'est le paramètre qui est passé à la fonction onComplete exécuté par l'objet Ajax lors de la réponse à la requete ajax.

    en gros l'objet ajax fait ceci :
    onComplete(xhrResult, ....);
    d'ou l'importance de l'utilisation de e dans ce context, et e n'a rien a voir avec un event.

  6. #6
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sur le oncomplet pourquoi passes tu par e qui n'est pas crossbrowser ?

    lance ta fonction popup en lui passant comme paramètre le responseTExt
    J'ai toujours le meme résultat, responseText est vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    url = "http://api.myspace.com/opensearch/people";
    new Ajax.Request(url, {
      method:'get',
      requestHeaders: {Accept: 'application/json'},
      parameters:{searchTerms:'celine'},
      onComplete: function(){alert(Ajax.responseText);}
     
    });

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par Gregory.M Voir le message
    J'ai toujours le meme résultat, responseText est vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    url = "http://api.myspace.com/opensearch/people";
    new Ajax.Request(url, {
      method:'get',
      requestHeaders: {Accept: 'application/json'},
      parameters:{searchTerms:'celine'},
      onComplete: function(){alert(Ajax.responseText);}
     
    });
    On ne peut pas faire d'ajax crossdomain tout simplement.

  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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    duke e = event en js ...
    utiliser e comem paramètre n'est il pas maladroit ..
    de plus cette syntaxe
    y'a une lib derrière ?

    perso je n'utilise que l'ajax de base en code js pur ...
    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
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    duke e = event en js ...
    utiliser e comem paramètre n'est il pas maladroit ..
    de plus cette syntaxe
    y'a une lib derrière ?

    perso je n'utilise que l'ajax de base en code js pur ...
    le nom du paramètre est maladroit si l'objet retourné est un dans la fonction est une instance de XMLHttpRequest.

    Mais comme le nom de la fonction est onComplete, en règle générale un handler prend un event en paramètre.

    Tout est relatif, mais de là à dire que faut pas passer par le paramètre de la fonction, je ne suis pas du tout d'accord

  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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    je n'ai jamais dit qu'il ne fallait pas passer par le paramètre de la fonction, je relevais juste l'utilisation de la lettre e qui pour moi peut entrainer confusion avec event.

    par contre quelle est la librairie utilisée ?
    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
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    je n'ai jamais dit qu'il ne fallait pas passer par le paramètre de la fonction, je relevais juste l'utilisation de la lettre e qui pour moi peut entrainer confusion avec event.

    par contre quelle est la librairie utilisée ?
    Pour en revenir à nos moutons, je suis quasiment certains que si notre cher ami regardait avec la console de firebug il verrait qu'il se prend une erreur de sécurité dans le nez car il essaye de faire de l'ajax crossdomain, d'où son problème de résultat vide.

  12. #12
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par dukej Voir le message
    Pour en revenir à nos moutons, je suis quasiment certains que si notre cher ami regardait avec la console de firebug il verrait qu'il se prend une erreur de sécurité dans le nez car il essaye de faire de l'ajax crossdomain, d'où son problème de résultat vide.
    J'utilise Firebug, ou est ce que je vois si il s'agit d'une erreur se sécu?

  13. #13
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    par contre quelle est la librairie utilisée ?
    Ca ressemble fort à du Prototype ^^ (librairie qui, soit dit en passant, a tout ce qu'il faut en terme de manipulation du JSON)

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  14. #14
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    oki comme je prototype pas ... ceci explique cela ...
    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 !

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par Gregory.M Voir le message
    J'utilise Firebug, ou est ce que je vois si il s'agit d'une erreur se sécu?
    fait ta requete ajax et admire dans la console (onglet console) le resultat.
    regarde si tu as une response ou non

  16. #16
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par dukej Voir le message
    fait ta requete ajax et admire dans la console (onglet console) le resultat.
    regarde si tu as une response ou non
    Oui mais elle est vide

  17. #17
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par Gregory.M Voir le message
    Oui mais elle est vide
    http://jsfiddle.net/5ShDH/
    Dans l'onglet réseau firebug indique une 404 pourtant l'url parait bonne, je suis prêt à parier que :
    1-myspace interdit les accès externes et check le referer
    2-Comme je l'ai dit l'ajax crossdomain est interdit

  18. #18
    Membre averti Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par dukej Voir le message
    http://jsfiddle.net/5ShDH/
    Dans l'onglet réseau firebug indique une 404 pourtant l'url parait bonne, je suis prêt à parier que :
    1-myspace interdit les accès externes et check le referer
    2-Comme je l'ai dit l'ajax crossdomain est interdit
    Les requêtes ajax cross domain, ne sont pas interdite. En fait ce n'est pas Ajax qui l'interdit mais le navigateur. Si tu essayes la meme chose sur Safari, cela fonctionnera.

  19. #19
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonjour,

    Effectivement, c'est le navigateur qui interdit les requetes cross-domain.
    Cependant, j'ai tapé l'URL dans un navigateur et on obtient une réponse de type application/json. Il est donc inutile de re-parser le JSON, tu peux directement l'obtenir en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //...
    onComplete:function(transport) {
    var result = transport.responseJSON;
    }
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

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

Discussions similaires

  1. [AJAX] Récupérer les clés d'un json après une requête ajax
    Par Nico_SAS dans le forum jQuery
    Réponses: 4
    Dernier message: 25/06/2014, 14h18
  2. Réponses: 1
    Dernier message: 01/10/2010, 18h07
  3. Renvoyer un tableau après une requête AJAX
    Par franquis dans le forum jQuery
    Réponses: 6
    Dernier message: 06/08/2010, 13h05
  4. Charger CKEditor après une requête AJAX
    Par Shirraz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/06/2010, 02h00
  5. Utilisation events après une requête ajax
    Par Maxow dans le forum jQuery
    Réponses: 1
    Dernier message: 23/08/2009, 23h50

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