3

我不明白。
我无法增加 Tweet-ID ...

这是一个演示:http: //jsbin.com/idupoq/1/edit

glb = {};
glb.lastTweetId = 0;

getTweets();

function getTweets()
{
    console.info('# LAST ID');
    console.log(glb.lastTweetId);

    console.info('# TEST 1');
    glb.lastTweetId++;
    console.log(glb.lastTweetId);  

    console.info('# TEST 2');
    glb.lastTweetId = glb.lastTweetId+1;
    console.log(glb.lastTweetId);  

    console.info('# TEST 3, OK IS INT BUT PARSE AGAIN ');
    glb.lastTweetId = parseInt(glb.lastTweetId);
    glb.lastTweetId++;
    console.log(glb.lastTweetId);  

    $.getJSON('http://search.twitter.com/search.json?q=%23wwm&since_id='+glb.lastTweetId+'&include_entities=true&result_type=mixed&lang=de&callback=?', function(data, textStatus)
    {
        if(data.results.length > 0)
        {
            glb.lastTweetId = data.results[0]['id'];
        }
        glb.tm= setTimeout('getTweets();',5000);
    });
}

提前致谢!

4

3 回答 3

7

发生这种情况是因为收到的 ID 超出了数字格式的范围,例如

271567725082578940 + 1 = 271567725082578940

您应该使用特殊库来处理大量数字。一些例子:

于 2012-11-22T11:26:41.377 回答
1

正如其他人已经说过的,这是因为 Number 无法表达271567725082578941。如果你想要对这个数字做的只是加一,那么下面的函数应该是你所需要的:

function stringInc(v){
    var digits = v.toString().split('');
    var i = digits.length-1;
    while (digits[i]==9 && i>0){      
      digits[i] = 0;
      i--;
    }
    digits[i] = 1+parseInt(digits[i]);
    return digits.join('');
}

如果您希望对数字做更多的事情,那么最好使用 VisioN 建议的 BigNumber 库。

无论哪种方式,您都应该注意您无法从 读取推文 ID data.results[0]['id'],因为它被解释为数字并四舍五入为271567725082578940。你需要使用data.results[0]['id_str'].

在此处查看更新的 jsbin:http: //jsbin.com/idupoq/19/。请注意,控制台正在记录来自服务器的结果:

...

"geo":null,
"id":     271580395022217200,
"id_str":"271580395022217216",
"iso_language_code":"de"

...

因此271567725082578940,您一直在观察的值也是不正确的。

于 2012-11-22T11:56:01.197 回答
1

脏但短
http://jsbin.com/idupoq/18/edit

    glb.lastTweetId = ''+data.results[0]['id']+'';
    var lastTwoDig = parseInt(glb.lastTweetId.substr(glb.lastTweetId.length-2));
    var startDigit = glb.lastTweetId.substring(0, glb.lastTweetId.length-2);
    lastTwoDig++;
    if(lastTwoDig==01){ lastTwoDig = '01'; }
    console.log(glb.lastTweetId);
    console.log(' '+startDigit+''+lastTwoDig+' ');      
于 2012-11-22T11:43:51.683 回答