$(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
但是这段代码似乎不起作用。 如果有人能以某种方式修改代码或提供任何响应,将非常感谢。 谢谢
答案 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上有一个例子。