Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用until参数调用Facebook新闻提要(me/home),每次连续调用返回limit/2_Javascript_Facebook Graph Api_Pagination - Fatal编程技术网

Javascript 使用until参数调用Facebook新闻提要(me/home),每次连续调用返回limit/2

Javascript 使用until参数调用Facebook新闻提要(me/home),每次连续调用返回limit/2,javascript,facebook-graph-api,pagination,Javascript,Facebook Graph Api,Pagination,这是我的代码的精简版本(没有初始化调用)。一切都运行得很好,除了我在FB.api中传入一个until值的每个连续调用都会返回limit/2。我试着在两次通话之间用不同的Facebook账户等上一分钟,但这并没有起到任何作用 我检查了返回对象中的下一个参数,URL只是添加了与我的dataUltimoPost数字完全相同的until参数。当我调用URL时,它也会返回一半的帖子 我发现其他帖子的返回和返回不一致,但没有一篇直接涉及分页方面。巧合的是,我遇到了一个使用与我的代码相同的逻辑来分页帖子的程序

这是我的代码的精简版本(没有初始化调用)。一切都运行得很好,除了我在FB.api中传入一个until值的每个连续调用都会返回limit/2。我试着在两次通话之间用不同的Facebook账户等上一分钟,但这并没有起到任何作用

我检查了返回对象中的下一个参数,URL只是添加了与我的dataUltimoPost数字完全相同的until参数。当我调用URL时,它也会返回一半的帖子

我发现其他帖子的返回和返回不一致,但没有一篇直接涉及分页方面。巧合的是,我遇到了一个使用与我的代码相同的逻辑来分页帖子的程序。所以我认为我走对了方向

职能:

function getPost (success, append) {
    var params = { limit: 25, date_format: 'U' };
    if (append)
        params.until = dataUltimoPost;

    FB.api('/me/home', 'get', params, function (userData) {
        if (userData.data.length > 0)
            dataUltimoPost = userData.data[userData.data.length - 1].created_time - 1;
        success.call(this, userData.data, append);
    });
};

function fillPost(posts, append) {
    var postsHTML = '';
    append = append === true;

    alert('posts.length: ' + posts.length + ' - append: ' + append);
}
getPost(fillPost); //returns 25
getPost(fillPost, true); //returns 12
getPost(fillPost, true); //returns 1 or 0
调用函数:

function getPost (success, append) {
    var params = { limit: 25, date_format: 'U' };
    if (append)
        params.until = dataUltimoPost;

    FB.api('/me/home', 'get', params, function (userData) {
        if (userData.data.length > 0)
            dataUltimoPost = userData.data[userData.data.length - 1].created_time - 1;
        success.call(this, userData.data, append);
    });
};

function fillPost(posts, append) {
    var postsHTML = '';
    append = append === true;

    alert('posts.length: ' + posts.length + ' - append: ' + append);
}
getPost(fillPost); //returns 25
getPost(fillPost, true); //returns 12
getPost(fillPost, true); //returns 1 or 0

这里有一篇来自Facebook自己的博文,解释了为什么你在索要25个结果时没有得到25个结果

在这里,他们明确承认,他们的FQL过滤机制在应用过滤之前预先限制了结果集。这是正在发生的事情的视觉效果


谢谢你的链接,我也读过这篇文章。然而,问题是它并没有限制基于过滤器的我。但是在使用until/limit时做了一些奇怪的事情。例如,如果我将limit设置为25并执行代码,我将收到以下计数25,12,7,0;总共44人。但是如果我将限制设置为11,我会得到11,11,9,总共31个。因此,如果只是简单地过滤,我应该收到相同的总数。对吗?Facebook承认通过API进行搜索不是正常的做法。知道过滤和限制以错误的顺序发生,您可以很快看到#s可能会关闭。如果许多排除的结果位于结果集的开头,则显示图像。所以在你看来,结果是从5月1日开始的,而实际上结果是从4月26日开始的,但它很早就把事情删掉了。使用不同的限制进行查询将产生不同的结果。见鬼,即使是完全相同的查询运行x次,也可能会产生不同的结果(stackoverflow上有很好的文档记录)。请理解,在使用Till的限制时,仍然会觉得有问题。具体地说,正如我的例子中所说的,通过减小极限值,我得到了一个不同的总数。顺便说一句,尽管它可能是不一致的,但我第一次给它打电话的时候,我总是得到我的极限。是的,它出了很大的问题。请参阅Facebook公开承认其过滤和限制结果集的错误、非标准方法的博客文章。在那篇博客文章里没关系。