谷歌驱动JS API nextpageToken无效

时间:2017-11-20 22:59:45

标签: javascript api google-drive-api

我只是遵循API文档并使用JS API进行简单查询 并收到错误400: 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);})
            })
        })
    })
}) 

从第一个查询返回的令牌是好的,让它充满。 但是在下一个查询中它会出错。

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

P.S。测试开发人员控制台,获取令牌并在下一个查询中获得相同的错误。

3 个答案:

答案 0 :(得分: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的有效性,因为在后续请求中输入null值将再次重新启动列表操作。

答案 1 :(得分:0)

这是我在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;
              }
           });
    }

答案 2 :(得分:-1)

我根本不相信这个!!!

谷歌做了这么愚蠢的事情。

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

检查了几次,确实如此。

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

耻!