2017-05-30 88 views
0

我是这种技术的新手,并且一直在研究很长时间,但成果有限。 (这里有很多指导和教程,但很多都是过时的,不再相关或不起作用。)我想要做的是创建一个GAS,将数据作为对象从Google工作表传递到JavaScript请求。我有几个限制 - JS驻留在内部唯一的Intranet上,我的Chrome(v58.0)设置限制了XMLHttpRequest(它完全适用于我的IE10版本),我无法访问Chrome中的开发者控制台(我可以在IE中)和我无法使用JQuery或任何其他插件。 GAS方面的一切似乎都能发挥作用并提供应有的东西,但JS似乎是问题所在。使用Google Apps脚本作为服务从电子表格中检索数据

当我访问该页面直接(通过什么用的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中出现的一些我看不到的错误。

必须有一个跨浏览器的解决方案呢?我觉得这很简单,我错过了。

回答

0

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

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

是的,我试过,并添加了填充“(”在输出的两端。这是当我得到SEC7112错误在IE –

相关问题