【问题标题】:Google App Script error 404: Response not definedGoogle App 脚本错误 404:未定义响应
【发布时间】:2020-02-12 15:46:37
【问题描述】:

我的代码应该从 google sheet 获取一些数据并通过外部 API POST 到系统。但是,当我运行代码时,我一直遇到错误 404。

调试时,表示response没有定义。这是有问题的代码的药水。我错过了什么吗?

function postLeave(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();  
  // used getLastRow() function [1] to narrow the array to have only cells with data.
var range = sheet.getRange("K2:K"+sheet.getLastRow()).getValues();
var searchString = "";


for (var i = 0; i<range.length; i++) {
    if(range[i][0] == searchString) {
    var lastRow = sheet.getRange(2+i,1,1,10).getValues();
    var userid = sheet.getRange("I2:I" + sheet.getLastRow()).getValues();


    var data = {
        //'user_id': lastRow[0][8],
        "leave_type_id":lastRow[0][9],
        "date":lastRow[0][7],
        "hours":lastRow[0][6],
 };
      var payload = JSON.stringify(data);
      var options = {
        'method': 'POST',
        'Content-Type': 'application/json',
        'payload' : data,
      };
      var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=key;
      var response = UrlFetchApp.fetch(url).getContentText();
      if (response === 200) {
      //var json = JSON.parse(response);         
      sheet.getRange(2+i, 11).setValue(1); 
      }
    else {
     sheet.getRange(2+i, 11).setValue(0);

     Logger.log(response)

    }
 }
}
}

文档

挑战端点。

https://github.com/10Kft/10kft-api/blob/master/sections/assignables.md

https://github.com/10Kft/10kft-api/blob/master/sections/leave-types.md https://github.com/10Kft/10kft-api/blob/master/sections/time-entries.md

【问题讨论】:

  • 可能'payload' : data, 应该是'payload' : payload,,因为你想传递字符串化的值?
  • 能否提供你要使用的API方法的官方文档?
  • @AaronDuniganAtLee,我已经尝试过了,但仍然遇到同样的错误
  • 感谢您的回复。当我看到链接的创建时间条目的文档时,没有使用project_id。但是脚本中的data 具有project_id 的属性。而且,您的脚本和文档之间的端点似乎不同。在你的脚本中,虽然使用了api/v1/users,但没有使用user_id,而是使用了project_id。所以我不明白你想在 API 中使用什么方法。我可以问你这些吗?

标签: post google-apps-script google-sheets response urlfetch


【解决方案1】:

这个修改怎么样?

修改点:

  • Content-Type不能直接用于UrlFetchApp.fetch()的选项。
  • var payload = JSON.stringify(data); 未使用。
  • options 不用于var response = UrlFetchApp.fetch(url).getContentText();。在这种情况下,它使用 GET 方法请求 URL。
  • var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=key; 没有被 ' 包围。

很遗憾,从官方文档中,我无法理解是否需要以json数据或表单数据发送此数据。所以我提出了以下两种模式。请检查它们。

修改脚本一:

在这个修改后的脚本中,数据作为 json 数据发送。请设置每个变量。也请设置key

从:
var payload = JSON.stringify(data);
var options = {
  'method': 'POST',
  'Content-Type': 'application/json',
  'payload' : data,
};
var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=key;
var response = UrlFetchApp.fetch(url).getContentText();
到:
var payload = JSON.stringify(data);
var options = {
  'method': 'POST',
  'contentType': 'application/json',
  'payload' : payload,
};
var key = "###"; // <--- Please set your key.
var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=' + encodeURIComponent(key);
var response = UrlFetchApp.fetch(url, options).getContentText();

修改脚本2:

在这个修改后的脚本中,数据作为表单数据发送。请设置每个变量。也请设置key

从:
var payload = JSON.stringify(data);
var options = {
  'method': 'POST',
  'Content-Type': 'application/json',
  'payload' : data,
};
var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=key;
var response = UrlFetchApp.fetch(url).getContentText();
到:
var options = {
  'method': 'POST',
  'payload' : data,
};
var key = "###"; // <--- Please set your key.
var url = 'https://api.10000ft.com/api/v1/users/' + userid + '/time_entries?auth=' + encodeURIComponent(key);
var response = UrlFetchApp.fetch(url, options).getContentText();

注意:

  • 在上面修改的脚本中,假设data对象和key中的每个值都是正确的。

参考:

【讨论】:

  • 谢谢@Tanaike,非常感谢您的帮助。我使用了修改后的脚本 2:效果很好。
  • @Just 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2018-07-04
  • 2010-09-16
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多