【发布时间】:2016-12-21 21:23:13
【问题描述】:
作为一个练习,我正在编写简单的(并且尽可能无状态)客户端应用程序(在 React 中),在单个 Facebook 实体的提要中显示帖子。应用程序从 Facebook Graph API 获取数据。
我使用 Facebook JS SDK 查询以下网址:/<entity-id>/feed?limit=20&fields=...
我有简单的分页按钮(“上一个”和“下一个”),它们分别查询在 response.paging.previous 和 response.paging.next 的 API 响应中收到的分页 URL。
问题是我不知道如何确定我是否在最后一页才能正确禁用“下一步”按钮。
我尝试了几件事,但我仍然没有得到我想要的。
选项 1:允许点击“下一步”直到没有更多响应数据
response.data.length == 0时按钮被禁用。paging对象包含nextURL,即使没有更多数据要接收,所以在进入没有数据的页面之前我无法检查它。问题是当我到达那个页面时,
response中也没有包含paging对象。因此,我无法使用“上一页”按钮返回到最后一页的数据。
选项 2:允许点击“下一步”直到我收到的数据少于查询限制
response.data.length < limit时按钮被禁用。适用于
data.length % limit != 0的集合。问题是在相反的情况下,例如当集合中有 40 个对象并且我在第二页上,限制为 20,我仍然可以单击“下一步”,但我最终在页面上没有更多对象,如选项 1 中所述。
选项 3:记住上次请求的 URL
最后一个请求的 URL 存储在变量中,即使
response中没有paging数据,“上一个”按钮也可以工作。只解决“你不能回去”的问题。
不能解决正确禁用“下一步”按钮的问题。仍然可以在最后一页有数据的情况下点击“下一步”,进入没有数据的空白页面。
所以问题是:
我怎样才能知道我已经收到了收藏中的最后一件物品,然后点击“下一步”我会进入无效的空白页面?
Graph API 甚至在集合的开头/结尾都提供了
response.pagingURL,这对我来说似乎很奇怪。
1234563即使没有“上一个”和“下一个”数据。
查询这些 URL 会导致
response带有空的data数组并且没有paging对象,因此我无法返回无状态应用程序。如果收集开始时没有
paging.previous,收集结束时没有paging.next不是更好吗?
【问题讨论】:
-
另外,我发现
paging.next永远不会消失,即使在列表的末尾,也会导致请求的无限循环。似乎必须记住最后一个nextURL 是什么,如果相同则中断? -
@Matt 这几乎是我过去遇到的问题之一。不过,再也不必使用 FB API。可能是该规范已更改,因此
next项目始终可用?
标签: facebook-graph-api pagination facebook-javascript-sdk