【问题标题】:Axios REST api client paginationAxios REST api 客户端分页
【发布时间】:2019-11-25 14:07:49
【问题描述】:

我有问题。我在烧瓶应用程序中有一个休息 api。应用程序连接到存储 10k 用户的数据库。我需要做一些类似分页的事情。例如,我想获取:100 个用户的列表,从 1 到 100,然后获取到下一页的 URL,用户从 101 到 200 等。我提出了这样的 axios 请求:

document.getElementById('showUserInputForm').addEventListener('submit', performGetRequest1);
function performGetRequest1(){
  var start = document.getElementById('starting').value;
  var limit = document.getElementById('limit').value;
  var resultElement = document.getElementById('getResult1');
  resultElement.innerHTML = '';

  axios.get('http://127.0.0.1:5000/users/page', {
    params: {
      start:start,
      limit:limit
    }
  })
    .then(function (response) {
     resultElement.innerHTML = generateSuccessHTMLOutput(response);
    })
    .catch(function (error) {
     resultElement.innerHTML = generateErrorHTMLOutput(error);
    });
}

此代码返回 json:

{
    "limit": 100,
    "next": "users/page?start=200&limit=100",
    "previous": "users/page?start=1&limit=99",
    "results": [
        {
{
        "id": 101,
        "password": "hicqjjzxftvq",
        "username": "jclkoxgwgvvw"
    },
    {
         "id": 100,
         "password": "xtitexyetpwg",
         "username": "uwerzuwnxkju"
    },

我如何使用这些下一个/上一个链接来制作 按钮?或者任何想法如何制作它?

【问题讨论】:

  • 所以基本上你是在问如何更改链接的href?您的问题确实与分页无关。
  • 它不会是 href - 我假设他不希望发生导航事件,因为它看起来像 generateSuccessHTMLOutput(response) 正在从项目列表中创建 HTML填充到结果元素中。我认为他在问如何存储返回的上一个和下一个 URL,以及如何将它们与一个按钮相关联,以便在单击任一 URL 时知道使用哪个 URL(无需离开页面)。
  • @MrSzegerege NelisV 的回答对你有用吗,还是你还在寻找解决方案?
  • 如果它仍然没有得到答复,我会为您制作一个 codepen 示例,以确保我们可以运行它。
  • @MrSzegerege 好吧,我建立在 NelisV 的答案之上。看看这个 JSFiddle。忽略脚本部分中 nextPage 函数下方的所有内容 - 我制作了一个假的 axios,以便我们可以保持它看起来相似。取消注释我评论的部分并将其放入您的环境中。应该发生的是当页面首次加载时,初始 URL (/users/page) 被命中。当您收到响应时,我们将变量存储在 nextUrl 和 previousUrl 中。然后,当您单击任一箭头时,我们检索该 URL 并告诉 performGetRequest1 将其用于 API 调用。 jsfiddle.net/graneyc8/7

标签: javascript python flask pagination axios


【解决方案1】:

后端实际上返回可用于下一页/上一页的端点。

你可以这样做:

let nextUrl = null;
let previousUrl = null;
url = 'http://127.0.0.1:5000/users/page';

function performGetRequest1(url){
  var start = document.getElementById('starting').value;
  var limit = document.getElementById('limit').value;
  var resultElement = document.getElementById('getResult1');
  resultElement.innerHTML = '';

  axios.get(url)
    .then(function (response) {
     resultElement.innerHTML = generateSuccessHTMLOutput(response);
     nextUrl = 'http://127.0.0.1:5000/' + response.next;
     previousUrl = 'http://127.0.0.1:5000/' + response.previous;
    })
    .catch(function (error) {
     resultElement.innerHTML = generateErrorHTMLOutput(error);
    });
}

如果您使用nextUrlpreviousUrl 运行此函数,它应该返回正确的值。

【讨论】:

  • 简单的解决方案在您的 HTML 代码中应该是这样的。 上一个 下一个
  • 请注意,它不会逃避错误,而且有点古怪。您想为此编写一些错误处理。
  • 你的函数需要接受一个参数,否则它不起作用。你这样做就像 **function MyFunction(parameter)```
  • 我忘了把网址用引号括起来 =)
  • 为我的代码添加了一个修复程序。你当然需要摆脱参数:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2017-08-11
相关资源
最近更新 更多