Facebook graph api 如何找到I';当查询Facebook Graph API时,我在最后一页?

Facebook graph api 如何找到I';当查询Facebook Graph API时,我在最后一页?,facebook-graph-api,pagination,facebook-javascript-sdk,Facebook Graph Api,Pagination,Facebook Javascript Sdk,作为练习,我正在编写一个简单(并且尽可能无状态)的客户端应用程序(在React中),在单个Facebook实体的提要中显示帖子。该应用程序从Facebook Graph API获取数据 我使用FacebookJSSDK查询以下URL://feed?limit=20&fields=… 我有简单的分页按钮(“上一个”和“下一个”),它们分别在response.paging.previous和response.paging.next中查询API响应中接收到的分页URL 问题是我不知道如何确定我是否在最

作为练习,我正在编写一个简单(并且尽可能无状态)的客户端应用程序(在React中),在单个Facebook实体的提要中显示帖子。该应用程序从Facebook Graph API获取数据

我使用FacebookJSSDK查询以下URL:
//feed?limit=20&fields=…

我有简单的分页按钮(“上一个”和“下一个”),它们分别在
response.paging.previous
response.paging.next
中查询API响应中接收到的分页URL

问题是我不知道如何确定我是否在最后一页以正确禁用“下一步”按钮

有两件事我试过了,但是我还是没有得到我想要的

选项1:允许单击“下一步”,直到没有更多数据响应

  • response.data.length==0
    时,按钮被禁用

  • paging
    对象包含
    next
    URL,即使在没有更多数据要接收的情况下也是如此,因此在进入没有数据的页面之前,我无法检查它

  • 问题是,当我到达该页面时,
    响应
    中也没有包含
    分页
    对象。因此,我无法使用“上一页”按钮返回到包含数据的最后一页

选项2:允许单击“下一步”,直到收到的数据少于查询限制

  • response.data.length
    时,按钮被禁用

  • 适用于
    data.length%limit!=0

  • 问题是在相反的情况下,例如,当集合中有40个对象,而我在第二个页面上的限制值为20时,我仍然可以单击“下一步”,但随后我在页面上没有更多的对象,如选项1所述

选项3:记住上次请求的URL

  • 最后一个请求URL存储在变量中,即使在
    响应中没有
    分页
    数据时,“previous”按钮也可以工作

  • 只解决“你不能回去”的问题

  • 无法解决正确禁用“下一步”按钮的问题。仍然可以在最后一个有数据的页面上单击“下一步”,然后进入没有数据的空白页面

所以问题是:

我怎样才能发现我已经收到了集合中的最后一个项目,单击“下一步”我将进入无效的空白页面

  • 在我看来,Graph API提供
    响应.分页
    URL,甚至在集合的开头/结尾,这似乎很奇怪

  • 例如,如果我有10篇文章的提要,我用
    限制20
    进行查询,我会收到
    响应
    ,其中包含
    数据:数组[10]
    分页
    对象,在
    分页.previous
    分页.next中都有有效的URL,即使没有“previous”和“next”数据

  • 查询这些URL会导致
    响应
    ,其中包含空的
    数据
    数组,并且没有
    分页
    对象,因此我无法返回无状态应用程序

  • 如果在集合开始时没有
    分页,在集合结束时没有
    分页,在集合开始时没有
    分页,在集合结束时没有
    分页,不是更好吗


通过基于指针的图形API分页

没有现成的方法来满足您的需求。 您应该管理左侧记录和“下一步”按钮,与Graph API分页分开。 作为一种解决方案,除了当前页面外,还要预加载下一页

保存上一个光标也是一种不好的做法:
“不要存储游标。如果添加或删除项目,游标可能很快变得无效。”

对于任何看到这一点的人,这实际上是可行的。我不确定以前的图形分页对象是否总是返回上一个和下一个,或者OP是否在任何地方出错。但是,我可以确认,当数据能够按照预期向前或向后移动时,它将正确返回上一个/下一个

下面的示例来自Graph API分页文档,显示了作为集合第一页的结果集

"data": [
       *data returned*
],
"paging": {
  "cursors": {
    "before": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd3T1Rrek9UZAzROVGN3TlRNNE5Eb3hOVEV6TURnM09UTTIZD",
    "after": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd4TURBd09UazROVFk1T0RNM05Eb3hOVEV6TURreU5qQXoZD"
  },
  "next": "https://graph.intern.facebook.com/v2.11/1809938745705498/comments?access_token=valid_token_goes_here"
}

请注意,对象中缺少“previous”属性。仅仅检查next或previous是否存在就足以让我继续禁用/隐藏按钮。

从那时起我就没有使用FB API,但如果是这样的话,它似乎终于有意义了。我确信在2016年12月它和我写的一样工作——我甚至在我自己的FB组上测试了它,在那里我写了10篇文章,然后查询了限制为20的提要,仍然收到
分页。上一个
分页。下一个
URL。这真是奇怪的行为,没问题。我想情况就是这样。感谢您的回复和澄清!:)关于保存游标-当我在浏览页面时,有人删除所提供游标引用的记录时会发生什么?如果我使用下一个URL,它将已经无效。有什么出路吗?例如,如何在浏览的中间返回一个页面?另外,我发现“代码>分页。下一个< /COD>永远不会消失,即使在列表的末尾,也会导致一个无限循环的请求。似乎人们必须记住上一个
下一个
URL是什么,然后如果它是相同的就中断?@Matt这几乎是我过去遇到的问题之一。但再也不用使用FBAPI了。该规范是否会更改,以便下一个
项始终可用?