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

AJAX Discussion :

[AJAX] JSONP, où est Ajax?


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Par défaut [AJAX] JSONP, où est Ajax?
    Bonjour. Je suis nouveau sur le forum, et j'ai besoin de comprendre une solution sur JSONP.

    Si j'ai bien compris, Ajax fonctionne au sein d'un même domaine, et conçu pour interroger une page de données (xml, texte, json, etc.)
    Pour faire du cross domain avec Ajax, toutes les solutions que je croise sur le Net passe par le framework Jquery (dont je suis en phase d'apprentissage), ou via les codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script src="url?callback=fctRappel"></script>
    function fctRappel(data) {data.clef1; data.clef2}
    J'ai donc experimenté la solution JSONP avec la fonction callback, page html sur un domaine A et page php sur un domaine B. Et tout va bien car j'ai reçu la fonction de rappel + extraction des données.

    Ce que je ne comprends pas, est pourquoi est ce si simple et sans Ajax ?
    Pourquoi la solution Ajax/JQuery fonctionne en cross domain ?
    Pourquoi Ajax si la solution avec <script src="url"> fonctionne ?

    Pardonnez ces incompréhensions, je cumule juste 9 mois de connaissance tous langages confondus. mctarek

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut,
    je ne sais pas si ce que je vais dire va te faire avancer, mais allons-y.

    Habituellement, la balise <script> te permet d'exécuter du code d'un serveur tiers. C'est toi qui choisis l'URL du script, autrement dit tu « invites » le script sur ta page. Tu le fais car tu connais le contenu du script, et tu n'as pas à craindre que ce serveur t'attaque.

    À l'inverse, le serveur n'est pas tenu de te faire confiance. En effet, n'importe qui peut appeler ce script depuis n'importe où, et le serveur ne sait pas qui utilise son script. Pour cette raison, il t'est impossible de manipuler le code source du script : le navigateur l'exécute, mais aucun mécanisme ne te permet de le récupérer. Voilà en quoi consistent les restrictions de la balise <script>.

    JSONP signifie JSON with Padding. Padding peut se traduire par remplissage. Il s'agit d'un mécanisme de coopération entre le client et le serveur. Lorsque tu « invites » le script, tu précises en paramètre le nom d'une variable de tes propres scripts (en l'occurence fctRappel). Alors, le serveur génère son contenu JSON, en le faisant précéder du nom de ta variable suivi du signe égal :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    // génération du JSON...
     
    echo $_GET['callback'] . '=' . $json;
    ?>
    Ceci sera traduit comme une affectation par ton navigateur, ce qui aura pour effet de placer le contenu JSON dans ta variable. Autrement dit, le serveur remplit ta variable.

    Tout ça n'est possible que parce qu'il y a une entente entre le client et le serveur, et comme tu le vois, ça ne viole pas la sécurité du code source
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Salut,
    je ne sais pas si ce que je vais dire va te faire avancer, mais allons-y.

    Habituellement, la balise <script> te permet d'exécuter du code d'un serveur tiers. C'est toi qui choisis l'URL du script, autrement dit tu « invites » le script sur ta page. Tu le fais car tu connais le contenu du script, et tu n'as pas à craindre que ce serveur t'attaque.

    À l'inverse, le serveur n'est pas tenu de te faire confiance. En effet, n'importe qui peut appeler ce script depuis n'importe où, et le serveur ne sait pas qui utilise son script. Pour cette raison, il t'est impossible de manipuler le code source du script : le navigateur l'exécute, mais aucun mécanisme ne te permet de le récupérer. Voilà en quoi consistent les restrictions de la balise <script>.

    JSONP signifie JSON with Padding. Padding peut se traduire par remplissage. Il s'agit d'un mécanisme de coopération entre le client et le serveur. Lorsque tu « invites » le script, tu précises en paramètre le nom d'une variable de tes propres scripts (en l'occurence fctRappel). Alors, le serveur génère son contenu JSON, en le faisant précéder du nom de ta variable suivi du signe égal :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    // génération du JSON...
     
    echo $_GET['callback'] . '=' . $json;
    ?>
    Ceci sera traduit comme une affectation par ton navigateur, ce qui aura pour effet de placer le contenu JSON dans ta variable. Autrement dit, le serveur remplit ta variable.

    Tout ça n'est possible que parce qu'il y a une entente entre le client et le serveur, et comme tu le vois, ça ne viole pas la sécurité du code source
    Merci Watilin pour cette réponse instructive.

    Dans mes recherches, je suis tombé sur : "Now the truth is, JSONP isn't AJAX at all technically speaking because it does not use XMLHttpRequest. JSONP requests are made by dynamically inserting a <script> tag into the DOM."
    Puis le même site enchaîne avec JsonP with JQuery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.ajax({
        // ... Use the AJAX utility as you normally would
        dataType: 'jsonp',
        // ...
    });
    source : devlog

    Est ce que Jquery utilise la solution script derrière le mot Ajax ?

    Cdlt;
    mctarek

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Oui. Le but de jQuery est de « lisser » le comportement de tout ce qui ressemble de près ou de loin à de l'Ajax, afin de faciliter le travail du développeur.

    D'après la doc officielle de jQuery ( http://api.jquery.com/jQuery.ajax/#jqXHR ), la technique JSONP est directement inspirée de cette page : http://bob.pythonmac.org/archives/20...te-json-jsonp/

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. [AJAX] Si c'est possible pour AJAX
    Par aminosgrp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/10/2008, 15h09
  2. Réponses: 2
    Dernier message: 02/09/2008, 13h27
  3. [AJAX] erreur 'article'est indéfini
    Par yosraisi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2008, 18h08
  4. [AJAX] propriété responseXml est null
    Par oFlex dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/03/2007, 09h38
  5. [AJAX] Javascript n'est pas exécuté avec ajax.
    Par John6281 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/02/2007, 14h35

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