2009-07-02 15 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 Domain json Antwort

'); 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 andernfalls die Cross-Domain-json Anfrage zu verwenden, um die JSON-Daten zu erhalten, die

ist

{ 
"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 JSON-Daten aus der URL

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

bekommen

Aber dieser Code scheint nicht zu funktionieren. Wenn jemand den Code irgendwie polieren oder irgendeine Antwort geben könnte, wird es sehr geschätzt. Danke

Antwort

2

Stobor ist auf dem richtigen Weg. Ich habe die Seite mit den Klassen- und Anleitungsinformationen besucht, die Sie offensichtlich verwendet haben: http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html. Das Skript nutzt den callback = Wert, den Yahoo verwendet, um die Callback-Funktion anzugeben, die die JSON-Daten umschließt (so dass es zu JSON P Daten wird). Sie haben einen Callback = getGeo in Ihrer URL, aber die TwitterCounter API hat NICHT haben eine Möglichkeit, eine Callback-Funktion anzugeben. Ich habe eine vollständige HTML-Seite mit dem Code, den Sie wurden unter Verwendung von:

<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> 

und Firebug gab mir einen Fehler, wenn ich die Taste aktiviert. Der Grund basiert auf diesem Absatz in der ursprünglichen Artikelaufruf:

Das ist eine gültige JavaScript-Anweisung, so kann es das Ziel eines Skript-Tags sein, das JavaScript zurückgibt (Raw JSON-Daten, ohne die Rückruffunktion, ist kein gültige JavaScript-Anweisung, so dass es nicht geladen werden kann, wenn es das Ziel eines Skript-Tags ist). Zum Vergleich sehen Sie sich hier die XML-Version dieses Aufrufs an.

Die "gültige JavaScript-Anweisung" ist die mit dem Funktionsnamen, der die eigentlichen Daten umschließt.

Stobors Lösung wäre perfekt, wenn Twittercounter JSONP-Anfragen zulässt und Sie eine Wrapper-Funktion angeben können. Wie dem auch sei, Sie müssen Ihren eigenen Proxy erstellen, der als Vermittler fungiert. Ich habe ein Beispiel auf how to create one using PHP on my blog.

+0

ja dein absolut richtig. Twitter Counter erlaubt keine Callback-Wrapper-Funktion. Ich werde das durchgehen. BTW, ich könnte auch Xml in diesem Fall verwenden, wenn ich es erraten möchte. – anand

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, die API-Dokumentation selbst zu überprüfen. Ich habe gerade auf die Tatsache hingewiesen, dass es einen "Callback =" in der URL gab, und ging damit ... – Stobor

2

Nur raten hier, aber könnte es sein, dass die Funktion getGeo außerhalb des Bereichs ist, wenn der JSON Callback ausgelöst wird? Versuchen Sie vielleicht, die getGeo-Funktion aus Ihrem $ (document) .ready() - Block zu entfernen.

bearbeiten: alternativ verwenden Sie bereits jQuery, oder? jQuery wird das Cross-Domain-Zeug für Sie tun!

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

Ich stimme zu. Das ist meiner Meinung nach der Fehler. – Boldewyn

+0

Ich habe versucht, mit getJSON vor und haben versagt. Es scheint nur nichts zu zeigen. Ich versuche, die getGeo-Funktion zu verschieben und zu überprüfen. – anand

+0

ich bewegte getGeo aus $ (Dokument) aber dint work.also ich denke nicht, twittercounter.com unterstützt jsonp format.Any Beratung? – anand