跨域json响应失败

时间:2009-07-02 12:14:29

标签: json twitter


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

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

'+jsonData.rank+'

'); 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(); }); });

我试着使用跨域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数据

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

但是这段代码似乎不起作用。 如果有人能以某种方式修改代码或提供任何响应,将非常感谢。 谢谢

2 个答案:

答案 0 :(得分:2)

这里只是猜测,但是当触发jsonp回调时,getGeo函数是否超出了范围?也许尝试将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+'
');
    }); 
});

答案 1 :(得分:2)

Stobor走在正确的轨道上。我访问了包含您明确使用的类和操作方法信息的页面:http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html。那里的脚本利用了Yahoo用来指定包装JSON数据的回调函数的callback =值(从而使其成为JSON P 数据)。您的网址中有callback = getGeo,但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语句”是包含实际数据的函数名称的语句。

如果Twittercounter允许JSONP请求并允许您指定包装函数,Stobor的解决方案将是完美的。实际上,您必须创建自己的代理才能充当中间人。我在how to create one using PHP on my blog上有一个例子。