我正在为自己开发一个Twitter网络应用程序。我正在检索最新的热门话题。
以下是我的表现:
$.ajax({
url: 'http://api.twitter.com/1/trends/1.json',
dataType: 'jsonp',
success: function(data){
$.each(data[0].trends, function(i){
$('div#trending').hide().append("<p><a href='"+data[0].trends[i].url+"'>"+data[0].trends[i].name+"</a></p>").fadeIn(1000);
//Cache into LocalStorage
localStorage["trending"+i] = data[0].trends[i].name; //Name
localStorage["trendurl"+i] = data[0].trends[i].url;//URL
});
}
});
但有时我在开发它时,会超出速率限制。
如何检测是否超过了速率限制?
我似乎无法检测是否显示此错误:
{"error":"Rate limit exceeded. Clients may not make more than 150 requests per hour.","request":"\/1\/trends\/1.json"}
我试过了:
success: function(data){
if(data[0].error != 'undefined'){
//load localstorage cache
}
}
但这似乎不起作用。 请帮忙。
谢谢:)
答案 0 :(得分:3)
当您受到费率限制时,Twitter API会发送HTTP 400状态代码,因此请检查:
$.ajax({
// ...
statusCode: {
400: function() {
alert( 'rate limited.' );
}
}
});
另请注意,您的比较有点不对劲。当错误文本不 data[0].error != 'undefined'
时,'undefined'
将始终生效。因此,即使您受到速率限制,错误文本也不会是'undefined'
,因此也会成功。您可能想要检查的是:
if ( !data[0].error ) { // data[0].error is not null
// ...
}
答案 1 :(得分:1)
尝试类似$ .ajax({..})。fail(function(){});
即
$.ajax({..})
.done(function() { alert("success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });
让我知道这是如何运作的。
欢呼声, /马尔钦
答案 2 :(得分:0)
如果您没有进行OAuth通话,则每小时限制为150次通话。但是,有一个小的解决方案对我有用。
根据关于速率限制的Twitter页面(http://dev.twitter.com/docs/rate-limiting),“速率限制适用于使用HTTP GET命令请求信息的方法。通常使用的API方法用于向Twitter提交数据的HTTP POST不受速率限制,但现在某些方法的速率有限。“
由于AJAX调用的默认类型是'GET',请尝试将您的类型显式更改为'POST',如下所示:
$.ajax({
url: 'http://api.twitter.com/1/trends/1.json',
type: 'POST',
dataType: 'jsonp',
success: function(data){
$.each(data[0].trends, function(i){
$('div#trending').hide().append("<p><a href='"+data[0].trends[i].url+"'>"+data[0].trends[i].name+"</a></p>").fadeIn(1000);
//Cache into LocalStorage
localStorage["trending"+i] = data[0].trends[i].name; //Name
localStorage["trendurl"+i] = data[0].trends[i].url;//URL
});
}
});
希望这有帮助!
詹姆斯