【问题标题】:google drive JS API nextpageToken invalidgoogle drive JS API nextpageToken 无效
【发布时间】:2017-11-20 22:59:45
【问题描述】:

我只是按照 API 文档并使用 JS API 进行了简单的查询 并收到错误 400: Invalid Value of nextPageToken

gapi.load('client', function(){
    gapi.client.load('drive', 'v3', function(){
        gapi.client.init({}
        ).then(function(){
            gapi.client.drive.files.list({
                'q'         : "name contains 'nv'",
                'pageSize'  : 10,
                'fields'    : "nextPageToken, files(id, name, webContentLink, folderColorRgb, thumbnailLink, description)",
                'orderBy'   : 'modifiedTime desc',
            }).then(function(respo){
                var token = respo.result.nextPageToken;
                gapi.client.drive.files.list({
                    'fields' : '*',
                    'pageToken' : token
                }).then(function(result){console.log(result.result);})
            })
        })
    })
}) 

第一次查询返回的令牌是好的,已满。 但是在下一个查询中它就出错了。

没有找到令牌的格式,所以我无法检查它是否好?!

附言经过测试的开发人员控制台,获取令牌并在下一个查询中得到相同的错误。

【问题讨论】:

    标签: javascript api google-drive-api


    【解决方案1】:

    我发现后续页面请求必须与第一个请求具有相同的 'q' 值,以避免出现 HTTP 400 错误。例如,如果第一个请求是:

       gapi.client.drive.files.list({
           'q'         : "name contains 'nv'",
           'pageSize'  : 10,
           'fields'    : "nextPageToken, files(id, name)"
       }).then(function(respo){
           ...
       }
    

    后续请求也必须有相同的'q':

       gapi.client.drive.files.list({
           'q'         : "name contains 'nv'",
           'pageToken' : nextPageToken,
           'pageSize'  : 10,
           'fields'    : "nextPageToken, files(id, name)"
       }).then(function(respo){
           ...
       }
    

    确保始终检查 nextPageToken 的有效性,因为在后续请求中提供空值将重新启动列表操作。

    【讨论】:

    • 优秀的答案。该文档没有提到需要使用相同的参数重复查询。有人会认为传入令牌足以生成下一页结果,但不,整个参数列表必须相同。
    【解决方案2】:

    我简直不相信!!!

    Google 做出如此愚蠢的事情。

    问题是它需要在下一个查询中写入,而不是 pageToken,而是 nextPageToken 并且它正在工作。

    检查了几次,确实如此。

    在文档中写错了,在他们的控制台中也是如此。

    耻辱!

    【讨论】:

    • 这似乎是正确的答案。甚至我的 linter 也告诉我这是错误的,但 pageToken 是唯一一个不会使其在运行时引发错误的方法。接得好。非常讨厌。
    【解决方案3】:

    这是我发现的尝试在 Google Drive JavaScript 操作中进行分页的最佳结果。他们应该只在他们的文档中显示一个示例,但我在那里找不到。然而,Facebook 有这样的例子。无论如何,要在他们的框架中进行分页:

    //Global variable to hold token pointer
    var NextPageToken = '';
    
    function GetFiles() {
       gapi.client.drive.files.list({
         'pageSize': 25,
         'q': "mimeType contains 'image/'",
         'fields': "nextPageToken, files(id, name)"
       }).then(function (response) {
                  var files = response.result.files;
                  // if response.result.nextPageToken exists, use it
                  if (response.result.nextPageToken) {
                     NextPageToken = response.result.nextPageToken;                        
                  } else {
                     NextPageToken = false;
                  }
               });
        }
    
    function GetNextSetOfImages() {
            gapi.client.drive.files.list({
                'pageSize': 25,
                'q': "mimeType contains 'image/'",
                'pageToken': NextPageToken,
                'fields': "nextPageToken, files(id, name)"
            }).then(function (response) {
                  var files = response.result.files;
                  // if response.result.nextPageToken exists, use it
                  if (response.result.nextPageToken) {
                     NextPageToken = response.result.nextPageToken;                        
                  } else {
                     NextPageToken = false;
                  }
               });
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2021-02-16
      • 2018-04-17
      • 1970-01-01
      • 2016-01-26
      • 2016-12-15
      • 1970-01-01
      相关资源
      最近更新 更多