2010-11-27 33 views
2

J'ai récemment regardé l'API Google Buzz et je pensais que ce serait similaire à l'API Twitter à interroger - et la documentation se lit à peu près comme ça. Il semblerait pas cependant, et je me gratter la tête à essayer de comprendre ce que je suis absent ...API Google Buzz renvoyant Null via JQuery?

À titre d'exemple, si vous jetez l'URL suivante dans un navigateur;

http://www.googleapis.com/buzz/v1/people/jonathan.beckett/@groups/@followers?alt=json

Il renvoie les données attendues. Si toutefois vous exécutez du code JQuery assez simple sur la même URL (comme indiqué ci-dessous), il renvoie null.

<html> 
<head> 
    <title>Buzz Wall of Awesome</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" language="javascript"></script> 
</head> 
<body> 
    <div>Buzz ID <input type="text" id="buzz_id" value="jonathan.beckett" /> <button id="following_button">Following</button> <button id="followers_button">Followers</button></div> 
    <div id="results"></div> 
    <script language="Javascript"> 
     $(document).ready(function(){ 
     var url = "http://www.googleapis.com/buzz/v1/people/jonathan.beckett/@groups/@followers?alt=json"; 
     $.getJSON(url,{}, function(data) { alert(data); }); 
     }); 
    </script> 
</body> 
</html> 

Des idées pourquoi?

Répondre

1

Vous devez invoquer le comportement JSONP ici, cu ajouter &callback=? à l'URL, comme ceci:

var url = "http://www.googleapis.com/buzz/v1/people/jonathan.beckett/@groups/@followers?alt=json&callback=?"; 

You can test it out here. Sans le paramètre callback=? (qui remplace jQuery), il essaie de faire un XMLHttpRequest pour obtenir les données JSON ... et ceci est bloqué par le same origin policy.

En ajoutant le paramètre (si le serveur prend en charge, et il le fait ici) vous êtes la cause $.getJSON() à utiliser JSONP à la place, qui fonctionne d'une manière tout à fait différente, en créant une étiquette <script> ... qui fonctionne cross-domain si la réponse est valide JavaScript.

+0

Merci! J'ai déjà vu ça, et j'ai tout oublié - tu m'as juste sauvé un tas de temps à fouiller dans la documentation. – Jonathan

+0

@ Jonathan - bienvenue :) comme une pointe, toujours commencer par la documentation de la méthode que vous êtes, ces tid bits seront là, par exemple: http://api.jquery.com/jQuery.getJSON/ a: "Si l'URL inclut la chaîne" callback =? "(ou similaire, tel que défini par l'API côté serveur), la requête est traitée comme JSONP à la place Voir la discussion sur le type de données jsonp dans $ .ajax() pour plus de détails." :) –