2009-07-02 5 views
2

$(document).ready(function() {      
    $('form#search').bind("submit", function(e){        
      e.preventDefault(); 
      $('#content').html(''); 

// Define the callback function 
    function getGeo(jsonData) {  
    $('#content').append('

'+jsonData.rank+'Cross réponse de domaine JSON ne

'); bObj.removeScriptTag(); } // The web service call var req = 'http://twittercounter.com/api/?username=Anand_Dasgupta&output=json&results=3&callback=getGeo'; // Create a new request object bObj = new JSONscriptRequest(req); // Build the dynamic script tag bObj.buildScriptTag(); // Add the script tag to the page bObj.addScriptTag(); }); });

Im tryin utiliser la requête intersite domaine JSON pour obtenir les données JSON qui est


{ 
"user_id":"3190399", 
"user_name":"Anand_Dasgupta", 
"followers_current":"86", 
"date_updated":"2009-06-04", 
"url":"", 
"avatar":"205659924\/DSC09920_normal.JPG", 
"follow_days":"0","started_followers":"86", 
"growth_since":0, 
"average_growth":"0", 
"tomorrow":"86", 
"next_month":"86", 
"followers_yesterday":"86", 
"rank":176184, 
"followers_2w_ago":null, 
"growth_since_2w":86, 
"average_growth_2w":"6", 
"tomorrow_2w":"92", 
"next_month_2w":"266", 
"followersperdate":[] 
} 

im obtenir les données JSON de l'url

http://twittercounter.com/api/?username=Anand_Dasgupta&output=json&results=3&callback=getGeo

Mais ce code ne semble pas fonctionner. Si quelqu'un peut polir le code en quelque sorte ou fournir une réponse, il sera très apprécié. Merci

Répondre

2

Stobor est sur la bonne voie. J'ai visité la page avec les informations de classe et de procédure que vous avez évidemment utilisées: http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html. Le script tire profit de la valeur callback = que Yahoo utilise pour spécifier la fonction de rappel qui enveloppe les données JSON (ce qui en fait des données JSON P). Vous avez un callback = getGeo dans votre URL, mais le TwitterCounter API ne pas ont un moyen de spécifier une fonction de rappel. J'ai créé une pleine page HTML en utilisant le code que vous utilisez:

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Twittercounter API Test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript" src="jsr_class.js"></script> 
    <script type="text/javascript"> 
    var bObj; 

    // Define the callback function 
    function getGeo(jsonData) {  
    $('#content').append(''+jsonData.rank+''); 
    bObj.removeScriptTag(); 
    } 

    $(document).ready(function() {      
     $('form#search').bind("submit", function(e){        
       e.preventDefault(); 
       $('#content').html(''); 
       // The web service call 
       var req = 'http://twittercounter.com/api/?username=Anand_Dasgupta&output=json&results=3&callback=getGeo'; 

       // Create a new request object 
       bObj = new JSONscriptRequest(req); 

       // Build the dynamic script tag 
       bObj.buildScriptTag(); 

       // Add the script tag to the page 
       bObj.addScriptTag(); 
     }); 
    }); 
    </script> 
    </head> 

    <body> 
    <form id="search"> 
    <input type="submit" id="search" value="Get Info" /> 
    </form> 
    <div id="content"> 
    </div> 
    </body> 
    </html> 

et Firebug m'a donné une erreur lorsque j'activé le bouton. La raison est basée sur ce paragraphe dans l'article original de l'article:

Ceci est une instruction JavaScript valide, donc il peut être la cible d'un tag de script qui renvoie JavaScript (données JSON brutes, sans la fonction de rappel, n'est pas un instruction JavaScript valide, il ne pourra donc pas être chargé s'il s'agit d'une cible de script). Pour comparaison, regardez la version XML de cet appel ici.

La "déclaration JavaScript valide" est celle avec le nom de la fonction enveloppant les données réelles.

La solution de Stobor serait parfaite si Twittercounter autorisait les requêtes JSONP et vous permettait de spécifier une fonction wrapper. Comme c'est le cas, vous devrez créer votre propre proxy pour agir en tant qu'intermédiaire. J'ai un exemple sur how to create one using PHP on my blog.

+0

oui tout à fait raison. Twitter Counter ne permet pas une fonction de wrapper de rappel. Je vais passer par là. BTW, je pourrais également utiliser xml dans ce cas si je veux deviner. – anand

+0

Merci d'avoir pris le temps de vérifier les documents de l'API eux-mêmes; Je viens de dire qu'il y avait un "callback =" dans l'URL, et je suis parti avec ça ... – Stobor

2

Juste deviner ici, mais pourrait-il être que la fonction getGeo est hors de portée lorsque le rappel jsonp est déclenché? Peut-être essayez de retirer la fonction getGeo de votre bloc $ (document) .ready()?

modifier: vous utilisez déjà jQuery, non? jQuery fera les choses interdomaines pour vous!

$(document).ready(function() 
{ 
    $.getJSON('http://twittercounter.com/api/?username=Anand_Dasgupta&output=json&results=3&callback=?',function(jsonData){ 
     $('#content').append(' 
'+jsonData.rank+' 
'); 
    }); 
}); 
+0

Je suis d'accord. C'est, à mon avis, l'erreur. – Boldewyn

+0

j'ai essayé d'employer getJSON avant et ai échoué. Il ne semble juste pas montrer n'importe quoi. Il essaie de déplacer la fonction getGeo et vérifie. – anand

+0

J'ai déplacé getGeo hors de $ (document) mais dint travail. Aussi je ne pense pas que twittercounter.com soutient le format jsonp.Tout conseil? – anand

Questions connexes