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 :

Démarrage utilisation AJAX et API


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut Démarrage utilisation AJAX et API
    Bonsoir,

    je commence à développer une API -> cela fonctionne en utilisant l'extension Chrome.

    Maintenant j'essaye de passer par le biais d'une page HTML avec jquery

    Au niveau de mon API lorsque je passe par l'extension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/api/v1/tasks
    Method : POST
    Headers : Authorization : 440eb3ed294c7f1e3ccbd002a8503e33
    Payload : action : mavaleur

    j'obtiens bien en retour status 201 created avec en JSON
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    error: false
    message: "Task created successfully"
    task_id: 2
    }

    Par contre lorsque j'essaye de faire la même chose par une page web, cela ne fonctionne pas
    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
    23
    24
    <html>
      <head>
        <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
          $(document).ready(function() {
            $.ajax({
              url: 'http://localhost/api/v1/tasks',
              type: 'POST',
              data: {task: valeur1} ,
              success: function() { alert('hello!'); },
              error: function() { alert('boo!'); },
              beforeSend: setHeader
            });
          });
     
          function setHeader(xhr) {
            xhr.setRequestHeader('Authorization', '440eb3ed294c7f1e3ccbd002a8503e33');
          }
        </script>
      </head>
      <body>
        <h1>Some Text</h1>
      </body>
    </html>
    Merci de votre aide

  2. #2
    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
    Un problème classique de Same Origin Policy...
    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

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    Merci donc si j'ai bien compris en faisant qlq recherches il faut utiliser JSONP.

    Reste à voir ce que je dois modifier côté client et/ou serveur.

    Je pouvais encore chercher car avec l extension cela fonctionnait.
    Entretemps j ai effectué des tests et j ai désactivé l authentification et cela avait l air de fonctionner donc je pensais que cela venait du passage du header

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    Bovino, je vais avoir besoin de ton aide.

    Environnement : Wamp dernière version 64.
    J'utilise le framework : slimframework
    Je me suis basé sur ce code pour l'API : http://www.androidhive.info/2014/01/...-mysql-day-23/

    Avec l'extension RESTclient de chrome cela fonctionne
    API/v1/register en post pour créer un user avec les 3 variables (email, password, name)
    API/v1/login en post avec les 2 variables (email, password) pour récupérer APIkey
    API/v1/tasks avec dans le header Authorization (apikey) et tasks pour le contenu

    J'ai créé une seconde version en retirant la partie authentification dans le routage TASKS avec la méthode POST. cela fonctionne toujours


    J'ai créé dans un autre répertoire le code suivant :
    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
    23
    24
    25
    26
    <html>
      <head>
        <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
          $(document).ready(function() {
     
            $.ajax({
                     url: 'http://localhost/bkpapi/v1/tasks',
            //    url: 'http://localhost/taskmanager/v1/tasks',
                type: 'POST',
                headers: {"Authorization": "4736e3f02a4e2cab381868b79f806436"},
              data: {'email': 'essai1%40gmail.com','password': 'essai1','task': 'bonjour'},
              dataType: 'json',
              success: function(data){ alert('hello!');},
              error: function(data){
                  alert("erreur");
                 }
            });
          });
     
        </script>
      </head>
      <body>
        <h1>exemple</h1>
      </body>
    </html>
    Lorsque j'utilise l'api initiale avec authentification cela ne fonctionne pas.
    Lorsque j'utilise l'api modifiée sans authentification cela fonctionne .


    Tu parles de SOP mais je ne vois pas comment contourner et/ou si c'est bien là le problème.

    la fonction d'authentification :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function authenticate(\Slim\Route $route) {
        // Getting request headers
        $headers = apache_request_headers();
        $response = array();
        $app = \Slim\Slim::getInstance();
     
        // Verifying Authorization Header
        if (isset($headers['Authorization'])) {
            $db = new DbHandler();
     
            // get the api key
            $api_key = $headers['Authorization'];
            // validating api key
            if (!$db->isValidApiKey($api_key)) {
                // api key is not present in users table
                $response["error"] = true;
                $response["message"] = "Access Denied. Invalid Api key";
                echoRespnse(401, $response);
                $app->stop();
            } else {
                global $user_id;
                // get user primary key id
                $user_id = $db->getUserId($api_key);
            }
        } else {
            // api key is missing in header
            $response["error"] = true;
            $response["message"] = "Api key is misssing";
            echoRespnse(400, $response);
            $app->stop();
        }
    }
    Merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    Je veux bien appeler une page locale en php mais cette dernière devra toujours appeler et passer des paramètres à ma page distante donc je reporte le problème sur une autre page et je ne trouve pas comment faire.

Discussions similaires

  1. [PHP-JS] Creer un Treeview qui utilise AJAX et PHP
    Par bambou dans le forum Langage
    Réponses: 10
    Dernier message: 19/09/2006, 15h11
  2. [SOAP] Utilisation de quelle API ?
    Par _beber85 dans le forum Services Web
    Réponses: 3
    Dernier message: 29/05/2006, 13h21
  3. [AJAX] Comment utiliser AJAX
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 06/04/2006, 15h16
  4. [DOM] Utilisation de l'API DOM pour créer du HTML sous IE
    Par pedouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2006, 14h48
  5. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26

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