Google 应用脚本错误 404:未定义响应
Google App Script error 404: Response not defined
我的代码应该通过外部 API.I 从 google sheet 和 POST 获取一些数据到系统,但是,保持 运行ning当我 运行 代码时进入错误 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
这个修改怎么样?
修改点:
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 数据或表单数据中发送此数据。所以我提出了以下两种模式。请检查它们。
修改后的脚本 1:
在此修改后的脚本中,数据作为 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
中的每个值都是正确的。
参考:
我的代码应该通过外部 API.I 从 google sheet 和 POST 获取一些数据到系统,但是,保持 运行ning当我 运行 代码时进入错误 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
这个修改怎么样?
修改点:
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 数据或表单数据中发送此数据。所以我提出了以下两种模式。请检查它们。
修改后的脚本 1:
在此修改后的脚本中,数据作为 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
中的每个值都是正确的。