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 :

Utilisation Ajax et setInterval [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut Utilisation Ajax et setInterval
    Bonjour à tous,

    Alors voilà, je souhaite récupérer le nombre de like Facebook pour une URL donnée. Le script PHP fonctionne parfaitement. Mais je veux afficher le nombre de like en temps réel, et donc je fais appel à l'Ajax, mais via la librairie jQuery.

    J'ai mis au point un bout de code, mais cela ne fonctionne pas, pourriez-vous m'aider à décrypter le problème ? Apparemment le nombre de like n'est pas rafraichit comme il se doit toutes les 5 secondes.

    Voici mon code

    Index.html

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<title>Titre de la page</title>
    	<link rel="stylesheet" href="style.css">
    	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
    	<script src="functions.js"></script>
    </head>
    <body>
    <div id="output"></div>
    </body>
    </html>

    likes.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
    20
    21
    <?php
    function get_fb_likes($url){
      $query = "select total_count,like_count,comment_count,share_count,click_count from link_stat where url='{$url}'";
       $call = "https://api.facebook.com/method/fql.query?query=" . rawurlencode($query) . "&format=json";
     
      $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $call);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       $output = curl_exec($ch);
       curl_close($ch);
       return json_decode($output);
    }
     
    $fb_likes = reset( get_fb_likes("http://www.cnn.com") );
    $likes = $fb_likes->like_count;
    echo json_encode($likes);
    /*echo $fb_likes->total_count;
    echo $fb_likes->comment_count;
    echo $fb_likes->share_count;
    echo $fb_likes->click_count;*/
    ?>

    functions.js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $(document).ready(function(){
        function ajax(){
            $.ajax({                                      
                url: 'likes.php',     
                data: "",
                dataType: 'json',    
                success: function(data){
                    var nbLikes = data; 
                    $('#output').html(nbLikes);
                } 
            });
        }
        setInterval(ajax(),5000);
    })(jQuery);
    Un grand merci !

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fb_likes = reset( get_fb_likes("http://www.cnn.com") );
    $likes = $fb_likes->like_count;

    Jamais utilisé l'API facebook mais selon le code ça doit être un objet json qu'elle semble te renvoyer (du coup ce que contient "output"). Or la fonction reset s'applique sur un tableau, et après tu utilise une notation objet. A mon avis y a quelque chose à faire de ce côté là...

  3. #3
    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
    Déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval("ajax()",5000);

    C'est la pire façon de faire un setInterval()...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval(ajax,5000);
    est beaucoup plus propre.

    Sinon, les requêtes sont par défaut en GET, tu es donc confronté à un problème manifeste de cache : ton script récupère toujours le résultat en cache, donc pas la valeur actualisée.
    L'idéal est de passer en POST ou d'utiliser le paramètre cache avec la valeur false.
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Si jet mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval(ajax,5000);
    , ca ne fonctionne pas, si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval(ajax(),5000);
    , là ca fonctionne.

    Donc pour le moment j'ai ceci :

    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
     
    $(document).ready(function(){
     
        function ajax(){
            $.ajax({                                      
                url: 'likes.php',     
                data: "",
                cache: false,
                dataType: 'json',    
                success: function(data)
                {
                    var nbLikes = data; 
                    $('#output').html(nbLikes);
                } 
            });
        }
     
        setInterval(ajax(),5000);
     
    });
    Mais même avec le cache à false, ça ne fonctionne pas... Pour passer en POST, je fais comment ?

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $.ajax({
         type: 'POST',
            .....

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Merci j'ai testé, mais cela ne fonctionne toujours pas, j'attends 5 min et toujours pas d'actualisation...

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

Discussions similaires

  1. [AJAX] Utilisation Ajax pour Domino
    Par Guega dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/08/2008, 14h26
  2. Réponses: 6
    Dernier message: 18/01/2008, 17h12
  3. utiliser ajax dans un générateur
    Par cortex024 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/06/2007, 16h27
  4. [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
  5. [AJAX] Comment utiliser AJAX
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 06/04/2006, 15h16

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