使用Google Apps脚本作为服务从电子表格中检索数据

时间:2017-05-30 12:44:52

标签: javascript json google-apps-script

我是这项技术的新手,长期以来一直在研究,但收效甚微。 (有很多说明和教程,但很多都已过时,不再相关或有效。)我要做的是创建一个GAS,将数据作为对象从谷歌表传递到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) + ')'

我明白了:

  
    

[Object HTMLScriptElement]

  

...作为输出。

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

必须有一个跨浏览器解决方案吗?我觉得这很简单,我很遗憾。

1 个答案:

答案 0 :(得分:0)

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

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