Данные из таблиц Google в javascript

Я пытаюсь создать диаграмму на основе данных из листов Google. После долгой борьбы и прочтения здесь множества тем я все еще не смог передать свои данные в javascript в моем html-файле, который будет использоваться для диаграммы.

Я поместил следующий код в свой проект code.gs в редакторе скриптов Google:

function doGet(e){
  return handleResponse(e);
}

function doPost(e){
  return handleResponse(e);
}

function handleResponse(e) {

  var lock = LockService.getPublicLock();
  lock.waitLock(2000);  // wait 5 seconds before conceding defeat.

try {
  var SCRIPT_PROP = PropertiesService.getScriptProperties(); // new property service
// get the chart data to pass through to front-end

  var doc = SpreadsheetApp.openById("HERE IS MY SPREADSHEET ID");
  var sheet = doc.getSheetByName("TestSheet");

  var headings = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0].map(function(heading) {
    return heading.toLowerCase();
  });

  Logger.log(headings);

  var values = sheet.getRange(2, 1, sheet.getLastRow()-3, sheet.getLastColumn()).getValues();

  var data = [];
  for (var i=0; i < values.length; i++) {
    var obj = {};
    for (var j = 0; j < values[i].length; j++) {
      obj[headings[j]] = values[i][j];
    }
    data.push(obj);
  }
  Logger.log(data);
  return data;

} catch(e){
    // if error return this
    return ContentService
          .createTextOutput(JSON.stringify({"result":"error", "error": e}))
          .setMimeType(ContentService.MimeType.JSON);
  } finally { //release lock
    lock.releaseLock();
  }
}

Это дает следующую стенограмму выполнения:

[18-04-12 20:23:51:233 PDT] Starting execution
[18-04-12 20:23:51:288 PDT] Lock.waitLock([2000]) [0.046 seconds]
[18-04-12 20:23:51:290 PDT] PropertiesService.getScriptProperties() [0.001 
seconds]
[18-04-12 20:23:51:407 PDT] 
SpreadsheetApp.openById([HERE IS MY SPREADSHEET ID]) 
[0.116 seconds]
[18-04-12 20:23:51:408 PDT] Spreadsheet.getSheetByName([TestSheet]) [0 
seconds]
[18-04-12 20:23:51:707 PDT] Sheet.getLastColumn() [0.299 seconds]
[18-04-12 20:23:51:708 PDT] Sheet.getRange([1, 1, 1, 2]) [0 seconds]
[18-04-12 20:23:51:808 PDT] Range.getValues() [0.099 seconds]
[18-04-12 20:23:51:810 PDT] Logger.log([[actor, income], []]) [0 seconds]
[18-04-12 20:23:51:906 PDT] Sheet.getLastRow() [0.095 seconds]
[18-04-12 20:23:52:004 PDT] Sheet.getLastColumn() [0.098 seconds]
[18-04-12 20:23:52:006 PDT] Sheet.getRange([2, 1, 3, 2]) [0.001 seconds]
[18-04-12 20:23:52:006 PDT] Range.getValues() [0 seconds]
[18-04-12 20:23:52:008 PDT] Logger.log([[{actor=Robert Downey, income=80.0}, 
{actor=Jackie Chan, income=50.0}, {actor=Vin Diesel, income=47.0}], []]) [0 
seconds]
[18-04-12 20:23:52:073 PDT] Lock.releaseLock() [0.065 seconds]
[18-04-12 20:23:52:075 PDT] Execution succeeded [0.834 seconds total 
runtime]

Таким образом, сторона листа Google, похоже, работает и развернута как webapp. У меня также есть еще одна аналогичная функция для передачи данных на другой лист, и она работает нормально (другой код, конечно, в другом проекте скрипта Google).

Когда я вызываю этот макрос из своего файла сценария, как показано ниже:

var request;
        console.info("before execute");
window.onload = callGoogleScript;
function callGoogleScript() {
    request = $.ajax({
    crossDomain: true,
        url: "https://script.google.com/macros/s/MY MACRO ID/exec",
        type: "get",
    dataType: "jsonp",
        });

        console.info("Trying this:", request);
    request.done(function (response, textStatus, jqXHR){
        // Log a message to the console
        console.info("Hooray, it worked!");
        console.info(response);
        console.info(textStatus);
        console.info(jqXHR);
    });

        console.info("After execute");

}

Выполнение не появляется в журналах скриптов Google, и я получаю следующее сообщение об ошибке в консоли Chrome:

before execute
results.html:96 Trying this: {readyState: 1, getResponseHeader: ƒ, 
getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
results.html:105 After execute
results.html:1 Refused to execute script from 
'https://script.google.com/macros/s/HERE IS MY MACRO ID/exec? 
callback=jQueryXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' because its MIME type 
('text/html') is not executable, and strict MIME type checking is enabled.

Не могли бы вы помочь мне решить, какой здесь недостающий ключ? Я пробовал несколько решений из других потоков, но, похоже, не могу заставить работать даже простой сценарий чтения. Спасибо заранее!

Вы уверены, что возвращаемый тип данных - это jsonp?

lucas 13.04.2018 05:56

Не уверен, как именно это сделать ... Уже пробовали несколько методов для вывода данных в формате JSON, но безуспешно ... Не могли бы вы помочь мне с кодом, чтобы "возвращаемые данные" были в JSON?

Oltsajee 13.04.2018 13:57

Я изменил последнюю часть скрипта Google «возвращать данные», чтобы вернуть ContentService .createTextOutput (JSON.stringify (data)) .setMimeType (ContentService.MimeType.JSON); и в стенограмме выполнения я вижу следующее: [18-04-14 08: 30: 17: 118 HKT] TextOutput.setMimeType ([JSON]) [0 секунд] Однако я все еще получаю ту же ошибку MIME в консоли Chrome, когда пытаюсь вызвать скрипт Google

Oltsajee 14.04.2018 02:31

Я снова изменил вывод Google: return ContentService.createTextOutput (JSON.stringify (values)) .setMimeType (ContentService.MimeType.JSON); после чего в журнале выполнения написано: ContentService.createTextOutput ([[[80], [50], [47], [41.5], [41] ‌, [99], [""]]]) [0 секунд] [18-04-16 00: 03: 11: 193 PDT] TextOutput.setMimeType ([JSON]) [0 секунд] НО ВСЕ ЕЩЕ вызов AJAX-запроса (datatype = JSONP) возвращает ошибку MIME ... любая подсказка, как это получить простая строка поверх?

Oltsajee 16.04.2018 09:04

Я предполагаю, что мой вопрос дошел до того, что JSON - это не JSONP - это два разных, но связанных типа данных. Если вы выводите JSON и ожидаете JSONP, может быть, в этом проблема?

lucas 17.04.2018 15:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
107
0

Другие вопросы по теме