使用Javascript合并JSON api响应
我正在尝试从Topsy获取分页json响应(http://code.google.com/p/otterapi/)我在合并对象时遇到问题。我希望在浏览器中执行此操作,因为api速率限制为每个ip/用户,并且服务器端的待办事项率较低 这是我的密码。有更好的办法吗?当然有,因为这不起作用。我想我想让它工作,但也要了解是否有更安全和/或更有效的方法 我收到的错误消息是 TypeError:表达式“window.holdtweetslist.prototype”[undefined]的结果不是对象 提前谢谢 干杯 斯蒂芬使用Javascript合并JSON api响应,javascript,jquery,json,api,Javascript,Jquery,Json,Api,我正在尝试从Topsy获取分页json响应(http://code.google.com/p/otterapi/)我在合并对象时遇到问题。我希望在浏览器中执行此操作,因为api速率限制为每个ip/用户,并且服务器端的待办事项率较低 这是我的密码。有更好的办法吗?当然有,因为这不起作用。我想我想让它工作,但也要了解是否有更安全和/或更有效的方法 我收到的错误消息是 TypeError:表达式“window.holdtweetslist.prototype”[undefined]的结果不是对象 提前
$(“#gettweets”).live('click',函数(事件){
event.preventDefault();
getTweets('stephenbaugh');
});
函数getTweets(名称){
var MAX_TWEETS=500;
var TWEETSPERPAGE=50;
var BASE=http://otter.topsy.com/search.json?type=tweet&perpage=“+TWEETSPERPAGE+”&window=a&nohidden=0&q=@“+name+”&page=1”;
var currentpage=1;
警报(基地);
$.ajax({
数据类型:“json”,
url:BASE,
成功:功能(数据){
window.responcesreceived=1;
var响应=data.response;
警报(响应总数);
window.totalweets=response.total;
window.pagestoget=Math.ceil(window.totalweets/window.TWEETSPERPAGE);
window.holdtweetslist=response.list;
window.holdtweetslist.prototype.Merge=(函数(ob){var o=this;var i=0;for(ob中的var z){if(ob.hasOwnProperty(z)){o[z]=ob[z];}}返回o;});
//警报(数据);
获取tweets(数据);
var循环计数器=1;
做
{
currentpage=currentpage+1;
pausecomp(1500);
var BASE=http://otter.topsy.com/search.json?type=tweet&perpage=“+TWEETSPERPAGE+”&window=a&nohidden=0&q=@“+name+”&page='+currentpage;
警报(基地);
$.ajax({dataType:“json”,url:BASE,success:gotweets(data)});
}
while(currentpage您正在以静态方法调用Merge
,但将其声明为“实例”方法(用于prototype
保留字)
从合并声明中删除prototype
,这样您就可以:
window.holdtweetslist.Merge = (function(ob)...
这将修复javascript错误。这是Topsy的Vipul。您是否可以共享您收到的文字JSON?我想确保您没有收到错误的响应。感谢Edgar和Vipul的帮助。不幸的是,他们能够回答我的问题。我已设法确定问题是j查询未正确解析json,需要将jsonp与topsy一起使用
下面是我创建的一个小测试
创建包含此对象的文档
<a href="#" id="gettweets">RUN TEST</a>
您将需要JQUERY
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
并将以下内容也放在一个脚本中。循环通过Topsy所需数量的tweet
再次感谢大家
$("#gettweets").live('click', function(event){
event.preventDefault();
getTweets('stephenbaugh');
});
var MAX_TWEETS = 500;
var TWEETSPERPAGE = 50;
var BASE = 'http://otter.topsy.com/search.json';
var currentpage;
var responcesreceived;
var totalweets;
var pagestoget;
var totalweets;
var TWEETSPERPAGE;
var holdtweetslist = [];
var requestssent;
var responcesreceived;
var tweetsfound;
var nametoget;
function getTweets(name) {
nametoget=name;
currentpage = 1;
responcesreceived = 0;
pagestoget = 0;
var BASE = 'http://otter.topsy.com/search.js?type=tweet&perpage=' + TWEETSPERPAGE + '&window=a&nohidden=0&q=@' + nametoget + '&page=1';
$('#gettweets').html(BASE);
$.ajax({url: BASE,
dataType: 'jsonp',
success : function(data) {
getalltweets(data);
}
});
};
function getalltweets(data) {
totalweets = data.response.total;
$('#gettweets').append('<p>'+"total tweets " + totalweets+'</p>');
$('#gettweets').append('<p>'+"max tweets " + MAX_TWEETS+'</p>');
if (MAX_TWEETS < totalweets) {
totalweets = 500
}
$('#gettweets').append('<p>'+"new total tweets " + totalweets+'</p>');
gotTweets(data);
pagestoget = Math.ceil(totalweets/TWEETSPERPAGE);
var getpagesint = self.setInterval(function() {
currentpage = ++currentpage;
var BASE = 'http://otter.topsy.com/search.js?type=tweet&perpage=' + TWEETSPERPAGE + '&window=a&nohidden=0&q=@' + nametoget + '&page=' + currentpage;
$.ajax({url: BASE,
dataType: 'jsonp',
success : function(data) {
gotTweets(data);
}
});
if (currentpage == pagestoget) {
$('#gettweets').append('<p>'+"finished sending " + currentpage+ ' of ' + pagestoget + '</p>');
clearInterval(getpagesint);
};
}, 2000);
};
function gotTweets(data)
{
responcesreceived = responcesreceived + 1;
holdlist = data.response.list;
for (x in holdlist)
{
holdtweetslist.push(holdlist[x]);
}
// var family = parents.concat(children);
$('#gettweets').append('<p>receipt # ' + responcesreceived+' - is page : ' +data.response.page+ ' array length = ' + holdtweetslist.length +'</p>');
// holdtweetslist.Merge(response.list);
tweetsfound = tweetsfound + data.response.total;
if (responcesreceived == pagestoget) {
// sendforprocessingsendtweetlist();
$('#gettweets').append('<p>'+"finished receiving " + responcesreceived + ' of ' + pagestoget + '</p>');
}
}
$(“#gettweets”).live('click',函数(事件){
event.preventDefault();
getTweets('stephenbaugh');
});
var MAX_TWEETS=500;
var TWEETSPERPAGE=50;
var BASE=http://otter.topsy.com/search.json';
var-currentpage;
风险值响应;
var totalweets;
var pagestoget;
var totalweets;
var TWEETSPERPAGE;
var holdtweetslist=[];
var请求权;
风险值响应;
var tweetsfound;
var nametoget;
函数getTweets(名称){
nametoget=名称;
currentpage=1;
responcesreceived=0;
pagestoget=0;
var BASE=http://otter.topsy.com/search.js?type=tweet&perpage=“+TWEETSPERPAGE+”&window=a&nohidden=0&q=@'+nametoget+”&page=1';
$('#gettweets').html(BASE);
$.ajax({url:BASE,
数据类型:“jsonp”,
成功:功能(数据){
getalltweets(数据);
}
});
};
函数getalltweets(数据){
totalweets=data.response.total;
$(“#gettweets”).append(“”+“total tweets”+totalweets+”);
$(“#gettweets”).append(“”+“max tweets”+max#u tweets+”);
如果(最大推文数<总推文数){
总weets=500
}
$(“#gettweets”).append(“”+“新的总计tweets”+总计tweets+””);
获取tweets(数据);
pagestoget=Math.ceil(totalweets/TWEETSPERPAGE);
var getpagesint=self.setInterval(函数(){
currentpage=++currentpage;
var BASE=http://otter.topsy.com/search.js?type=tweet&perpage=“+TWEETSPERPAGE+”&window=a&nohidden=0&q=@'+nametoget+”&page='+currentpage;
$.ajax({url:BASE,
数据类型:“jsonp”,
成功:功能(数据){
获取tweets(数据);
}
});
如果(currentpage==pagestoget){
$(“#gettweets”).append(“”+“已完成发送”+currentpage+”,共“+pagestoget+””);
清除间隔(getpagesint);
};
}, 2000);
};
函数获取tweets(数据)
{
responcesreceived=responcesreceived+1;
holdlist=data.response.list;
对于(保留列表中的x)
{
holdtweetslist.push(holdlist[x]);
}
//var family=parents.concat(children);
$(“#gettweets”).append(“receipt”#“+responcesreceived+”-是页面:“+data.response.page+”数组长度=“+holdtweetslist.length+””);
//holdtweetslist.Merge(response.list);
tweetsfound=tweetsfound+data.response.total;
if(responcesreceived==pagestoget){
//sendforprocessingsendtweetlist();
$(“#gettweets”).append(“”+“已完成接收”+responcesreceived+”+pagestoget+“”);
}
}
谢谢埃德加。我现在得到一份不同的
$("#gettweets").live('click', function(event){
event.preventDefault();
getTweets('stephenbaugh');
});
var MAX_TWEETS = 500;
var TWEETSPERPAGE = 50;
var BASE = 'http://otter.topsy.com/search.json';
var currentpage;
var responcesreceived;
var totalweets;
var pagestoget;
var totalweets;
var TWEETSPERPAGE;
var holdtweetslist = [];
var requestssent;
var responcesreceived;
var tweetsfound;
var nametoget;
function getTweets(name) {
nametoget=name;
currentpage = 1;
responcesreceived = 0;
pagestoget = 0;
var BASE = 'http://otter.topsy.com/search.js?type=tweet&perpage=' + TWEETSPERPAGE + '&window=a&nohidden=0&q=@' + nametoget + '&page=1';
$('#gettweets').html(BASE);
$.ajax({url: BASE,
dataType: 'jsonp',
success : function(data) {
getalltweets(data);
}
});
};
function getalltweets(data) {
totalweets = data.response.total;
$('#gettweets').append('<p>'+"total tweets " + totalweets+'</p>');
$('#gettweets').append('<p>'+"max tweets " + MAX_TWEETS+'</p>');
if (MAX_TWEETS < totalweets) {
totalweets = 500
}
$('#gettweets').append('<p>'+"new total tweets " + totalweets+'</p>');
gotTweets(data);
pagestoget = Math.ceil(totalweets/TWEETSPERPAGE);
var getpagesint = self.setInterval(function() {
currentpage = ++currentpage;
var BASE = 'http://otter.topsy.com/search.js?type=tweet&perpage=' + TWEETSPERPAGE + '&window=a&nohidden=0&q=@' + nametoget + '&page=' + currentpage;
$.ajax({url: BASE,
dataType: 'jsonp',
success : function(data) {
gotTweets(data);
}
});
if (currentpage == pagestoget) {
$('#gettweets').append('<p>'+"finished sending " + currentpage+ ' of ' + pagestoget + '</p>');
clearInterval(getpagesint);
};
}, 2000);
};
function gotTweets(data)
{
responcesreceived = responcesreceived + 1;
holdlist = data.response.list;
for (x in holdlist)
{
holdtweetslist.push(holdlist[x]);
}
// var family = parents.concat(children);
$('#gettweets').append('<p>receipt # ' + responcesreceived+' - is page : ' +data.response.page+ ' array length = ' + holdtweetslist.length +'</p>');
// holdtweetslist.Merge(response.list);
tweetsfound = tweetsfound + data.response.total;
if (responcesreceived == pagestoget) {
// sendforprocessingsendtweetlist();
$('#gettweets').append('<p>'+"finished receiving " + responcesreceived + ' of ' + pagestoget + '</p>');
}
}