2009-07-02 3 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+'Междоменного JSON ответа неудача

'); 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 использовать запрос перекрестного домена JSon, чтобы получить данные в формате JSON, который


{ 
"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":[] 
} 

им получать данные в формате JSON из URL

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

Но этот код, похоже, не работает. Если кто-то может полировать код каким-то образом или предоставить какой-либо ответ, он будет высоко оценен. Thank You

ответ

2

Stobor находится на правильном пути. Я посетил страницу с информацией о классе и практической информации, которую вы, очевидно, использовали: http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html. В сценарии используется значение callback =, которое Yahoo использует для указания функции обратного вызова, которая обертывает данные JSON (таким образом, это делает данные JSON P). У вас есть обратный вызов = getGeo в вашем URL-адресе, но TwitterCounter API делает NOT, чтобы указать функцию обратного вызова. Я создал полную страницу HTML, используя код, который вы использовали,:

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

и Firebug дал мне ошибку, когда я активировал кнопку. Причина основана на этом абзаце в записи оригинальной статьи:

Это действительный оператор JavaScript, поэтому он может быть целью тега скрипта, который возвращает JavaScript (необработанные данные JSON без функции обратного вызова, не является действительный оператор JavaScript, поэтому он не будет загружаться, если он является объектом тега сценария). Для сравнения рассмотрим XML-версию этого вызова здесь.

«Действительный оператор JavaScript» - это имя функции, которое обертывает фактические данные.

Решение Stobor было бы идеальным, если Twittercounter разрешил бы запросы JSONP и дал бы вам указать функцию обертки. Как бы то ни было, вам придется создать свой собственный прокси-сервер, чтобы выступать в качестве посредника. У меня есть пример на how to create one using PHP on my blog.

+0

да, это абсолютно правильно. Счетчик Twitter не разрешает функцию обертки обратного вызова. Затем, я буду проходить через этот класс. Кстати, я мог бы также использовать xml в этом случае, если захочу, я думаю. – anand

+0

Спасибо, что нашли время проверить сами документы API; Я просто отказался от того, что в URL-адресе был «callback =», и пошел с этим ... – Stobor

2

Просто угадай здесь, но может быть, что функция getGeo выходит за пределы области действия, когда срабатывает обратный вызов jsonp? Возможно, попробуйте переместить функцию getGeo из вашего блока $ (document) .ready()?

изменить: альтернативно, вы уже используете jQuery, правильно? jQuery будет делать кросс-доменные вещи для вас!

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

Согласен. То есть, на мой взгляд, ошибка. – Boldewyn

+0

Я пробовал использовать getJSON раньше и провалился. Он просто не показывает ничего. И попробуйте переместить функцию getGeo и проверить. – anand

+0

Я переместил getGeo из $ (документа), но dint work.also я не думаю, что twittercounter.com поддерживает формат jsonp. Любой совет? – anand

Смежные вопросы