我正在尝试执行 Google 电子表格的 doGet 函数,以便从表格中获取一些数据。数据必须在 JSON 对象中返回。现在,我在 JSON 对象中返回简单的虚拟内容,因为我还不能接收 JSON 对象并从中读取数据。
我有一个简单的 doGet 函数,由 HTML 站点调用。
doGet 函数包含一个 count() 函数,该函数计算对该 doGet 函数的每次调用。这样我就知道, doGet 被执行(这部分工作正常)。
function doGet(e){
//add +1 to value of a specific spreadsheet cell;
//count() always works, even though I don't get the JSON object.
count();
var content = {
"answer": "This is an answer",
"body" : "Welcome to the web app."
};
//convert JavaScript object into a string
//so that it can be sent
var JSONString = JSON.stringify(content);
var JSONOutput = ContentService.createTextOutput(JSONString);
JSONOutput.setMimeType(ContentService.MimeType.JSON);
return JSONOutput;
}
现在,我创建了一个调用此 doGet 函数的 HTML 站点。我正在记录一些部分以查看实际执行的内容。
<html>
<head>
<title>Call GAPI</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<script src="./jquery/jquery-3.3.1.min.js" type="text/javascript"></script>
<script>
console.log("Prepare API Call");
$(function(){
$.getJSON('https://script.google.com/macros/s/*encrpyted-URL*/exec?callback=?', function(json) {
var json = JSON.parse(result); //parsing is necessary because response is actually a TextOutput which needs to be turned into a javascript object
console.log(json.answer); //not executed
console.log("Done API Call"); //not executed
});
});
console.log("End");
</script>
</body>
</html>
大多数时候我在控制台中看到这个:
Prepare API Call
End
因此,除了 API 调用之外的所有内容都会被执行。有时,我也会收到一个 CORB 错误阻塞,这很奇怪,因为它并不总是出现:
跨域读取阻止 (CORB) 阻止了 MIME 类型 text/html的跨域响应https://script.google.com/macros/s/myURL/exec?callback=jQuery331014863254459179753_1548439425031&_=1548439425032 。有关更多详细信息,请参阅https://www.chromestatus.com/feature/5629709824032768。
它说我收到了一个 text/html 响应,这不是很奇怪吗?在 doGet 函数中,返回的对象被声明为 JSON 对象。然而,goGet 返回一个 TextOutput 对象或字符串。这就是为什么需要对其进行解析......我不知道为什么我无法读取返回的 JSON 对象以及为什么我会收到这个 CORB 错误。有人能帮我吗?
还有一件事:仅使用 URL/exec 调用“被 CORS 策略阻止”;所以我需要以某种方式添加 URL/exec?callback=? 解决这个问题。