Я новичок в этой технике и давно занимаюсь исследованиями с ограниченным успехом. (Есть много инструкций и руководств, но многие из них устарели и больше не актуальны или не работают.) Я пытаюсь создать GAS, который доставляет данные в виде объекта из листа Google в запрос javascript. . У меня есть несколько ограничений: JS находится только во внутренней интрасети, мои настройки Chrome (v58.0) ограничивают XMLHttpRequest (который отлично работает в моей версии IE10), я не могу получить доступ к консоли разработчика в Chrome (могу в IE) и Я не могу использовать JQuery или любой другой плагин. Кажется, что все на стороне GAS работает и обеспечивает то, что должно, но проблема, похоже, заключается в JS.
Когда я обращаюсь к странице напрямую (через то, что создается doGet(), доставляется текстовый результат объекта. Все данные отображаются так, как должны, но в виде простого текста.
Вот мой ГАЗ (выполнять от имени меня, анонимно):
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]
... как выход.
Если я изменю тип mime в GAS на JSON, я получу ошибку SEC7112 в IE (был заблокирован из-за несоответствия типа mime) и какую-то ошибку в Chrome, которую я не вижу.
Должно быть кросс-браузерное решение для этого? Я чувствую, что это что-то простое, что мне не хватает.