【问题标题】:Using Google Apps Script as service to retrieve data from spreadsheet使用 Google Apps 脚本即服务从电子表格中检索数据
【发布时间】:2017-08-14 04:52:04
【问题描述】:

我是这项技术的新手,并且研究了很长时间,但收效甚微。 (那里有很多说明和教程,但其中很多已经过时,不再相关或有效。)我想做的是创建一个 GAS,将数据作为对象从 google sheet 传递到 javascript 请求.我有几个限制 - JS 驻留在内部唯一的 Intranet 上,我的 Chrome (v58.0) 设置限制了 XMLHttpRequest(在我的 IE10 版本中完美运行),我无法访问 Chrome 中的开发人员控制台(我可以在 IE 中)和我不能使用 JQuery 或任何其他插件。 GAS 方面的一切似乎都能正常工作并提供应有的功能,但 JS 似乎是问题所在。

当我直接访问页面时(通过 doGet() 生成的内容,传递对象的文本结果。所有数据都按应有的方式显示,但显示为纯文本。

这是我的 GAS(以我身份执行,匿名):

function doGet() {
var oReturnLinks = [];
var sLinks = SpreadsheetApp.openById("secret").getSheetByName("links");
var oLinks = sLinks.getSheetValues(2, 1, -1, -1);

//loop over data and determine what to return
for (a=0;a<oLinks.length;a++) {
    if (oLinks[a][0] == true && oLinks[a][1].trim() != '' && oLinks[a][2].trim() != '' && oLinks[a][3].trim() != '' && oLinks[a][4].trim() != '' ) {

        oReturnLinks.push(oLinks[a]);

    }

}

if (oReturnLinks.length > 0) {

    return ContentService.createTextOutput(JSON.stringify(oReturnLinks)).setMimeType(ContentService.MimeType.JAVASCRIPT);

} else {

    return ContentService.createTextOutput(JSON.stringify("no data returned")).setMimeType(ContentService.MimeType.JAVASCRIPT);

}

}

然后在我内网的 JS 中(在 IE10 中有效):

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://script.google.com/macros/s/secret/exec", false);
xhttp.setRequestHeader("Content-type", "application/json");
xhttp.send();
var response = JSON.parse(xhttp.responseText);

我也试过这个:

var s
s = document.createElement("script");
s.src = "https://script.google.com/macros/s/secret/exec";
var oResult = JSON.stringify(s);
alert(oResult);

...但它会产生

{}

结果。

如果我将这个添加到输出内容中:

'(' + JSON.stringify(oReturnLinks) + ')'

我明白了:

[对象 HTMLScriptElement]

...作为输出。

如果我将 GAS 中的 mimetype 更改为 JSON,我会在 IE 中收到 SEC7112 错误(由于 mime 类型不匹配而被阻止),并且在 Chrome 中会出现一些我看不到的错误。

必须有一个跨浏览器的解决方案吗?我觉得这是我想念的简单的东西。

【问题讨论】:

    标签: javascript json google-apps-script


    【解决方案1】:

    您将 MIME 类型设置为 JAVASCRIPT 而不是 JSON。

    return ContentService.createTextOutput(JSON.stringify(oReturnLinks))
      .setMimeType(ContentService.MimeType.JSON);
    

    【讨论】:

    • 是的,我试过了,并在输出的两端添加了填充“(”。那是我在 IE 中收到 SEC7112 错误的时候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多